【问题标题】:How can I prevent embedded resource file culture being set based on its filename如何防止根据文件名设置嵌入式资源文件文化
【发布时间】:2017-01-21 12:04:09
【问题描述】:

在 VS2015 .NET 4.6.1 项目中,我有一个数据资源文件,其构建操作设置为“嵌入式资源”,名称如下:

myDataFile.bin.zip

不幸的是,“bin”是我的 Windows 10 机器上存在的一种语言环境,这会导致文件被识别为特定语言环境的资源,而不是默认的(Visual Studio 似乎可以识别在将<name>.<locale>.<ext> 格式化为特定于区域设置),从而创建附属程序集。

这意味着在构建时,我会得到两个程序集:

myproject.dll
bin\myproject.resources.dll

我希望文件包含在项目程序集中,而不是附属程序集中。

不改文件名,这样可以吗?

谢谢!

【问题讨论】:

    标签: c# .net visual-studio locale embedded-resource


    【解决方案1】:

    此行为由 Mi​​crosoft.Common.CurrentVersion.targets(位于 C:\Program Files (x86)\MSBuild\14.0\Bin)中的 SplitResourcesByCulture 构建目标和 Microsoft.Build.Tasks.AssignCulture 类实现。我查看了源代码,但没有找到一个可以切换的简单开关,以防止“bin”被误解为文化名称。事实上,对于 C# 项目,文件名仅在嵌入资源“依赖于”同名 .cs 文件时才单独保留。

    因此,除了重写标准构建目标之外,您还有一个简单的(如果有点老套的话)解决方法:

    1. 在 myDataFile.bin.zip 所在的文件夹中,向项目中添加一个名为 myDataFile.bin.cs 的空 C# 代码文件。 除了最后的扩展名(.cs 而不是 .zip)之外,此名称必须与嵌入资源的名称​​完全匹配您可以将文件完全留空,也可以添加评论来解释发生了什么:

      // This source file prevents the nested myDataFile.bin.zip file from being treated as
      // a resource for the "bin" culture.
      
    2. 保存项目。 (为确保项目文件得到保存,请单击文件 » 全部保存。)

    3. 在文本编辑器中打开 .csproj 项目文件并找到 myDataFile.bin.zip 的 <EmbeddedResource> 元素:

      <EmbeddedResource Include="myDataFile.bin.zip" />
      
    4. 插入引用 C# 代码文件的子 &lt;DependentUpon&gt; 元素:

      <EmbeddedResource Include="myDataFile.bin.zip">
        <DependentUpon>myDataFile.bin.cs</DependentUpon>
      </EmbeddedResource>
      
    5. 保存项目文件并在 Visual Studio 中重新加载项目。

    6. 在解决方案资源管理器中直观地确认 myDataFile.bin.zip 嵌套在 myDataFile.bin.cs 下。

    7. 构建项目。您的资源现在嵌入在主程序集中而不是附属程序集中。

    【讨论】:

    • 注意,似乎在更现代的(netcore5+?)中,任务现在将尊重“WithCulture”元数据,因此&lt;EmbeddedResource Include="myDataFile.bin.zip" WithCulture="false" /&gt;(或子节点&lt;WithCulture&gt;false&lt;/WithCulture&gt;)可以解决问题。合并:github.com/dotnet/msbuild/pull/5824
    • @admalledd 要使 WithCulture 正常工作,它需要 MsBuild 16.9
    猜你喜欢
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2011-08-01
    相关资源
    最近更新 更多