代码之家  ›  专栏  ›  技术社区  ›  Antony Scott

我需要resx Designer.cs文件吗?

  •  15
  • Antony Scott  · 技术社区  · 14 年前

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

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

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

    5 回复  |  直到 14 年前
        1
  •  12
  •   Leniel Maccaferri    14 年前

    Compiling Resources into Assemblies

    当您构建应用程序时,visualstudio调用 resgen.exe 将应用程序资源转换为 内部的 类称为资源。这个班是 包含在Resources.Designer.cs中 嵌套在 解决方案中的Resources.resx文件 探险家。资源类 静态只读获取中的资源 运行时的强类型资源。 当您通过visualc构建# 数据,包括 嵌入到.resx文件中 以及链接的文件 直接进入应用程序程序集 文字,Visual C#IDE总是使用 从命令行生成,您可以 指定/linkresource编译器 使您能够部署 主应用程序集。这是一个 高级场景,仅限于 在某些罕见的情况下是必要的。

        2
  •  15
  •   ianneub    12 年前

    不过,我可以在不使用命令行的情况下重新生成它们。

    1. 已删除Designer.cs文件
    2. 挑选出来的 Run Custom Tool

    重建了Designer.cs文件。

    希望将来能帮助别人。。

        3
  •  4
  •   Manfred    9 年前

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

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

    此解决方案基于在项目文件的项组中将所有资源文件列为“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>
    

        4
  •  2
  •   mmz    7 年前

    试试这个:

    • 右键单击resx文件
    • 单击“属性”
    • 设置属性:
    • 复制到输出目录:始终复制

    保存并重新生成。

        5
  •  1
  •   Hedego    6 年前

    遵循这些步骤对我很有效。

    • 单击“属性”
    • 自定义工具:PublicResXFileCodeGenerator
    • 单击“运行自定义工具”。