2010-07-09 48 views
13

我的公司使用一些数据库表,网页前端和“导出”应用程序的组合来处理我们的网站中的字符串资源。我需要resx Designer.cs文件吗?

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

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

那么,有没有一种方法,没有那些designer.cs文件,或者某种方式自动重新生成(或者甚至是一些命令出口申请可以调用重新生成)

回答

7

从MSDN我们有:

Compiling Resources into Assemblies

当你建立你的应用程序时,Visual Studio调用 resgen.exe的工具来转换您的应用程序资源资源分为 内部 类称为资源。该类包含在Resources.Designer.cs 文件中的 文件,该文件嵌套在Solution Explorer中的 Resources.resx文件下。资源类 将所有项目资源封装为静态只读属性,作为在运行时提供强类型资源的一种方式。 当你通过Visual C#打造 IDE,所有封装的资源 数据,包括那个被嵌入到.resx文件 和链接文件的资源 ,编译 直接进入应用程序组件 (.exe文件或.dll文件)。在其他 单词中,Visual C#IDE总是使用 /resource编译器选项。如果从命令行生成 ,则可以使用 指定/ linkresource编译器 选项,该选项使您可以将 资源部署在与 主应用程序程序集不同的文件中。这是一种 高级方案,在某些罕见情况下仅需要 。

+1

谢谢,有时它只是知道要搜索什么:) 我会在周一早上看看。 – 2010-07-09 23:56:34

+1

太棒了,我只是改变了我的导出应用程序来运行resgen工具,如果在.resx文件所在的文件夹中还存在.designer.cs文件(> 0字节)。 (我不能等到星期一,好奇心越来越好) – 2010-07-10 21:10:00

+0

嗯,这并不正确。它编译得很好,但是当我运行它时,应用程序崩溃了。所以,我尝试了一种几乎可行的不同方法。我已经开始了一个新问题,因为这是一个稍微不同的问题。 http://stackoverflow.com/questions/3230585/run-custom-tool-for-resx-files-in-mvc2-project-from-an-external-application-sc – 2010-07-12 17:16:59

11

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

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

要解决该问题在Visual Studio 2010中我做了以下内容:

  1. 删除的文件Designer.cs
  2. 右主RESX文件
  3. 选择点击Run Custom Tool

这重建了Designer.cs文件。

。希望可以帮助别人的未来..

+1

当然,自定义工具属性的resx文件应该包含类似'PublicResXFileCodeGenerator'的东西(并且只要您编辑该字段,就会自动生成设计器文件) – ekkis 2014-09-19 00:53:10

+0

我们使用自定义工具来同步来自我们的语言服务器的resx文件。这个技巧非常适合VS重建相关代码隐藏文件! – 2015-07-02 13:49:48

1

如果你喜欢构建项目时自动生成* .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> 
  • 找到名为 “BeforeBuild” 目标。这个目标可能会被注释掉(默认)。
  • 修改“BeforeBuild”的目标如下:
  •  
    <Target Name="BeforeBuild"> 
        <CallTarget Targets="GenerateDesignerFiles"/> 
    </Target> 
    

    该解决方案是基于所有的资源文件被列为“EmbeddedResource”项目文件的的ItemGroup,例如内

     
    <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。

    +0

    它适用于VS2015。稍微有点评论:我不得不提供'CustomToolNamespace',否则它会生成一个'.cs'文件,其名称等同于'.resx'文件。 – Caramiriel 2016-01-25 09:18:18

    0

    试试这个:

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

    保存并重新构建。 问题解决了。