我需要resx Designer.cs文件吗?

Ant*_*ott 16 resx visual-studio-2010

我公司使用一些数据库表,一个网页前端和一个"导出"应用程序的组合来处理我们网站中的字符串资源.

当我们使用VS2008时,导出应用程序曾经工作得很好,但是自从切换到VS2010后,资源现在在解决方案资源管理器中"下方"有一个designer.cs文件.

问题是"导出"应用程序只生成.resx文件而不生成底层的designer.cs文件.

那么,有没有办法不使用那些designer.cs文件,或者某种方式自动重新生成(甚至某些命令导出应用程序可以调用重新生成它们)

ian*_*eub 13

我有一个问题,VS 2010不会重新生成Designer.cs文件,并且无法在其他地方找到解决方案.

我能够重新生成它们,而无需进入命令行.

若要解决Visual Studio 2010中的问题,我执行了以下操作:

  1. 删除了Designer.cs文件
  2. 右键单击主resx文件
  3. Run Custom Tool

这重建了Designer.cs文件.

希望将来有可能帮助别人..


Len*_*rri 8

从MSDN我们有:

将资源编译为程序集

构建应用程序时,Visual Studio将调用 resgen.exe用于将应用程序资源转换为名为Resources的内部类的工具.此类包含在Resources.Designer.cs文件中,该文件嵌套在解决方案资源管理器中的Resources.resx文件下.Resources类将所有项目资源封装到静态readonly get属性中,作为在运行时提供强类型资源的方法.通过Visual C#IDE构建时,所有封装的资源数据(包括嵌入到.resx文件中的资源和链接文件)都直接编译到应用程序程序集(.exe或.dll文件)中.换句话说,Visual C#IDE始终使用/ resource编译器选项.如果从命令行构建,您可以指定/ linkresource编译器选项,该选项将使您能够在主应用程序集中的单独文件中部署资源.这是一种高级方案,仅在某些罕见情况下才需要.

  • 太棒了,如果在与 .resx 文件相同的文件夹中还有一个 .designer.cs 文件(> 0 字节),我只是更改了我的导出应用程序以运行 resgen 工具。(我等不及星期一了,好奇心占了上风) (2认同)

Man*_*red 5

如果您更喜欢在构建项目时从 *.resx 文件自动生成 *.designer.cs 文件,以下方法对我们有用,也可能对您有用:

  1. 关闭您的解决方案
  2. 将要在其中自动生成设计器文件的项目文件作为 XML 文件打开。请注意,您需要将其作为 XML 文件加载。您无法通过项目属性页编辑这些设置。
  3. 将目标添加到项目中,如下所示:
<Target Name="GenerateDesignerFiles">
   <Message Text="正在删除旧的设计器文件..."/>
   <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).resources')"/>
   <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"/>
   <Message Text="正在生成设计器文件..."/>
   <生成资源
      来源="@(EmbeddedResource)"
      StronglyTypedLanguage="C#"
      StronglyTypedClassName="%(文件名)"
      StronglyTypedNamespace="@(EmbeddedResource->'%(CustomToolNamespace)')"
      StronglyTypedFileName="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"
      公共类=“真”
      >
   </生成资源>
   <Message Text="生成设计器文件完成。"/>
</目标>
  1. 找到名为“BeforeBuild”的目标。这个目标可能会被注释掉(默认)。
  2. 修改“BeforeBuild”目标如下:
<目标名称="BeforeBuild">
   <CallTarget Targets="GenerateDesignerFiles"/>
</目标>

此解决方案基于在项目文件的 ItemGroup 中列为“EmbeddedResource”的所有资源文件,例如

<项目组>
  <EmbeddedResource Include="Resources\Creditor\Display_Creditor.resx">
    <Generator>PublicResXFileCodeGenerator</Generator>
    <LastGenOutput>Display_Creditor.Designer.cs</LastGenOutput>
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace>
  </嵌入式资源>
  <EmbeddedResource Include="Resources\InboundEmail\Tooltip_InboundEmailDetails.resx">
    <Generator>PublicResXFileCodeGenerator</Generator>
    <LastGenOutput>Tooltip_InboundEmailDetails.Designer.cs</LastGenOutput>
    <CustomToolNamespace>Acme.Web.Resources.InboundEmail</CustomToolNamespace>
  </嵌入式资源>
  <EmbeddedResource Include="Resources\Creditor\Tooltip_CreditorDetails.resx">
    <Generator>PublicResXFileCodeGenerator</Generator>
    <LastGenOutput>Tooltip_CreditorDetails.Designer.cs</LastGenOutput>
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace>
  </嵌入式资源>
</ItemGroup>

免责声明:这已经过 Visual Studio 2013 和 C# 项目的测试。它可能适用于也可能不适用于其他项目和/或其他版本的 Visual Studio。