我需要resx Designer.cs文件吗?

问题描述 投票:15回答:5

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

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

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

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

visual-studio-2010 resx
5个回答
8
投票

从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编译器选项,该选项将使您能够在主应用程序集中的单独文件中部署资源。这是一种高级方案,仅在某些罕见情况下才需要。


12
投票

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

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

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

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

这重建了Designer.cs文件。

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


3
投票

如果您希望在构建项目时从* .resx文件自动生成* .designer.cs文件,则以下方法适用于我们,它也可能对您有用:

  1. 关闭你的解决方案
  2. 以XML文件的形式打开要在其中自动生成设计器文件的项目文件。请注意,您需要将其作为XML文件加载。您无法通过项目属性页面编辑这些设置。
  3. 将项目添加到项目中,如下所示:
<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>
  1. 找到名为“BeforeBuild”的目标。此目标可能已被注释掉(默认值)。
  2. 修改“BeforeBuild”目标,如下所示:
<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,也可能不适用。


1
投票

试试这个:

  • 右键单击resx文件
  • 单击属性
  • 设置属性:
  • 复制到输出目录:始终复制
  • 自定义工具:PublicResXFileCodeGenerator

再次保存并构建。问题解决了。


0
投票

遵循这些步骤对我有用。

  • 删除designer.cs文件。
  • 单击属性
  • 输出目录 - 始终复制。
  • 自定义工具:PublicResXFileCodeGenerator
  • 保存并构建。
  • 右键单击resx和
  • 单击运行自定义工具。
© www.soinside.com 2019 - 2024. All rights reserved.