我公司使用一些数据库表,网页前端和“导出”应用程序的组合来处理我们网站中的字符串资源。
当我们使用VS2008时,导出应用程序工作得很好,但是自从切换到VS2010后,资源现在在解决方案资源管理器中“下方”有一个designer.cs文件。
问题是“导出”应用程序只生成.resx文件,而不生成底层的designer.cs文件。
那么,是否有办法不使用那些designer.cs文件,或者某种方式自动重新生成(甚至某些命令导出应用程序可以调用以重新生成它们)
答案 0 :(得分:12)
我遇到了一个问题,即VS 2010无法重新生成Designer.cs文件,并且无法在其他地方找到解决方案。
我能够重新生成它们,而无需转到命令行。
要解决Visual Studio 2010中的问题,我执行了以下操作:
Run Custom Tool
重建了Designer.cs文件。
希望将来有可能帮助别人..
答案 1 :(得分:8)
从MSDN我们有:
Compiling Resources into Assemblies
构建应用程序时,Visual Studio会调用 resgen.exe 工具,可将您的应用资源转换为 内部 类称为Resources。这堂课是 包含在Resources.Designer.cs中 嵌套在。下的文件 解决方案中的Resources.resx文件 资源管理器。 Resources类 封装你的所有项目 资源进入静态只读获取 属性作为一种提供方式 运行时强类型资源。 当你通过Visual C#构建时 IDE,所有封装的资源 数据,包括资源 嵌入到.resx文件中的内容 和链接的文件,编译 直接进入应用程序集 (.exe或.dll文件)。其他 单词,Visual C#IDE总是使用 / resource编译器选项。如果你 从命令行构建,你可以 指定/ linkresource编译器 使您能够部署的选项 资源在一个单独的文件中 主要应用程序集。这是个 高级方案,仅限 在某些罕见的情况下是必要的。
答案 2 :(得分:2)
如果您希望在构建项目时从* .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。
答案 3 :(得分:1)
试试这个:
再次保存并构建。 问题解决了。
答案 4 :(得分:0)
遵循这些步骤对我有用。