我的公司使用一些数据库表,一个网页前端和一个“导出”应用程序的组合来处理我们网站中的字符串资源。
当我们使用VS2008时,导出应用程序曾经工作得很好,但是自从切换到VS2010后,资源现在在解决方案资源管理器中“下方”有一个designer.cs文件。
问题是“导出”应用程序只生成.resx文件而不生成底层的designer.cs文件。
那么,有没有办法不使用那些designer.cs文件,或者某种方式自动重新生成(甚至某些命令导出应用程序可以调用重新生成它们)
从MSDN我们有:
Compiling Resources into Assemblies
构建应用程序时,Visual Studio会调用resgen.exe工具将应用程序资源转换为名为Resources的内部类。此类包含在Resources.Designer.cs文件中,该文件嵌套在解决方案资源管理器中的Resources.resx文件下。 Resources类将所有项目资源封装到静态readonly get属性中,作为在运行时提供强类型资源的方法。通过Visual C#IDE构建时,所有封装的资源数据(包括嵌入到.resx文件中的资源和链接文件)都直接编译到应用程序程序集(.exe或.dll文件)中。换句话说,Visual C#IDE始终使用/ resource编译器选项。如果从命令行构建,则可以指定/ linkresource编译器选项,该选项将使您能够在主应用程序集中的单独文件中部署资源。这是一种高级方案,仅在某些罕见情况下才需要。
我有一个问题,VS 2010不会重新生成Designer.cs文件,并且无法在其他地方找到解决方案。
我能够重新生成它们,而无需进入命令行。
若要解决Visual Studio 2010中的问题,我执行了以下操作:
Run Custom Tool
这重建了Designer.cs文件。
希望将来有可能帮助别人..
如果您希望在构建项目时从* .resx文件自动生成* .designer.cs文件,则以下方法适用于我们,它也可能对您有用:
<Target Name="GenerateDesignerFiles"> <Message Text="Deleting old Designer Files..."/> <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).resources')"/> <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"/> <Message Text="Generating Designer Files..."/> <GenerateResource Sources="@(EmbeddedResource)" StronglyTypedLanguage="C#" StronglyTypedClassName="%(Filename)" StronglyTypedNamespace="@(EmbeddedResource->'%(CustomToolNamespace)')" StronglyTypedFileName="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')" PublicClass="true" > </GenerateResource> <Message Text="Generating Designer Files complete."/> </Target>
<Target Name="BeforeBuild"> <CallTarget Targets="GenerateDesignerFiles"/> </Target>
该解决方案基于在项目文件的ItemGroup内列为“EmbeddedResource”的所有资源文件,例如,
<ItemGroup> <EmbeddedResource Include="Resources\Creditor\Display_Creditor.resx"> <Generator>PublicResXFileCodeGenerator</Generator> <LastGenOutput>Display_Creditor.Designer.cs</LastGenOutput> <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> </EmbeddedResource> <EmbeddedResource Include="Resources\InboundEmail\Tooltip_InboundEmailDetails.resx"> <Generator>PublicResXFileCodeGenerator</Generator> <LastGenOutput>Tooltip_InboundEmailDetails.Designer.cs</LastGenOutput> <CustomToolNamespace>Acme.Web.Resources.InboundEmail</CustomToolNamespace> </EmbeddedResource> <EmbeddedResource Include="Resources\Creditor\Tooltip_CreditorDetails.resx"> <Generator>PublicResXFileCodeGenerator</Generator> <LastGenOutput>Tooltip_CreditorDetails.Designer.cs</LastGenOutput> <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> </EmbeddedResource> </ItemGroup>
免责声明:这已经过Visual Studio 2013和C#项目的测试。它可能适用于其他项目和/或其他版本的Visual Studio,也可能不适用。
试试这个:
再次保存并构建。问题解决了。
遵循这些步骤对我有用。