我需要resx Designer.cs文件吗?

时间:2010-07-09 23:38:25

标签: visual-studio-2010 resx

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

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

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

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

5 个答案:

答案 0 :(得分:12)

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

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

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

  1. 删除了Designer.cs文件
  2. 右键单击主resx文件
  3. 已选择Run Custom Tool
  4. 重建了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文件,则以下方法适用于我们,它也可能对您有用:

  1. 关闭解决方案
  2. 以XML文件的形式打开要在其中自动生成设计器文件的项目文件。请注意,您需要将其作为XML文件加载。您无法通过项目属性页编辑这些设置。
  3. 将目标添加到项目中,如下所示:
  4. <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”目标,如下所示:
    3. <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)

试试这个:

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

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

答案 4 :(得分:0)

遵循这些步骤对我有用。

  • 删除您的designer.cs文件。
  • 点击属性
  • 输出目录-始终复制。
  • 自定义工具:PublicResXFileCodeGenerator
  • 保存并构建。
  • 右键单击resx和
  • 点击运行自定义工具。