在编译时禁用Dll文化文件夹

时间:2013-12-03 03:01:32

标签: c# .net wpf culture

我正在使用2个dll(Microsoft.Expression.Interactions.dllSystem.Windows.Interactivity.dll),在编译父应用程序时,会创建大量的文化文件夹:

每个内部都有2个dll(Microsoft.Expression.Interactions.resources.dllSystem.Windows.Interactivity.resources.dll)。我已经google了一下,我找不到任何与如何阻止这个恼人的自动生成内容相关的内容。

11 个答案:

答案 0 :(得分:27)

遇到同样的问题。我的项目使用ASP.NET Core 3.1

将此行添加到您的* .csproj

<PropertyGroup>
   <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>

答案 1 :(得分:20)

此问题有两种解决方法:

  • 复制System.Windows.Interactivity.dll并直接向此文件添加引用
  • 从以下位置删除这些文件夹:
    \Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.5\Libraries

相关链接:
Original solution
Generated files by caliburn.micro in Release directory

答案 2 :(得分:11)

我使用其他解决方案。您可以在Vistual Studio中为项目配置Post-build事件,这将删除多余的文件夹:

rd /s /q "de", "en", "es", "fr", "it", "ja", "ko", "ru", "zh-Hans", "zh-Hant"

此解决方案比从sdk文件夹中删除文件夹的侵入性小。

答案 3 :(得分:5)

在使用nuget包Microsoft.VisualStudio.Web.CodeGeneration.Design的.NET Core 3.1项目中,我遇到了相同的问题

首先从您的项目目录中删除文件夹“ bin”。

然后,您需要为软件包设置选项'ExcludeAssets'。

在Visual Studio中:

enter image description here

或者另一种方法是直接在* .csproj文件中进行如下更改:

...
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1">
    <ExcludeAssets>All</ExcludeAssets>
</PackageReference>
...

对我来说,它解决了这个问题。

UPD: 我找到了第二个解决方案-这是让您选择所需的区域设置文件夹的另一种方法。但是,如果您采用这种方式-再次删除'bin'文件夹,并将所选软件包的'ExcludeAssets'选项设置为默认值-空。

在* .csproj文件中,像这样添加标签“ SatelliteResourceLanguages”

...
<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <SatelliteResourceLanguages>ru;en-US</SatelliteResourceLanguages>
</PropertyGroup>
...

对于我的项目,我现在具有默认的美国语言环境和其他“ ru”语言环境。您可以使用分隔符';'选择其他语言环境。他们之间。

此处找到第二种解决方案https://github.com/dotnet/sdk/issues/774

答案 4 :(得分:1)

Fwiw,我能够通过修改我的csproj从我的构建中转储它们使用system.windows.interactivity.dll:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Import Project="$(   **<CHOPPED**>... />
  <PropertyGroup>

 <!--added this line for system.windows.interactivity.dll to dump the localized dll's-->
    <SupportedCultures>en-US</SupportedCultures>

答案 5 :(得分:1)

在程序集范围应用 System.Resources.NeutralResourcesLanguageAttribute 属性,如下所示:

[assembly: System.Resources.NeutralResourcesLanguageAttribute("en")]

(这个的好地方是项目属性部分的AssemblyInfo.cs文件)

答案 6 :(得分:1)

我遇到了同样的问题(此处为similar answer),但其他答案都对我无济于事,所以我所做的是在主“ csproj”的末尾添加以下几行:

<ItemGroup>
    <FluentValidationExcludedCultures Include="be;cs;cs-CZ;da;de;es;fa;fi;fr;ja;it;ko;mk;nl;pl;pt;ru;sv;tr;uk;zh-CN;zh-CHS;zh-CHT">
        <InProject>false</InProject>
    </FluentValidationExcludedCultures> 
</ItemGroup>

<Target Name="RemoveTranslationsAfterBuild" AfterTargets="AfterBuild">
    <RemoveDir Directories="@(FluentValidationExcludedCultures->'$(OutputPath)%(Filename)')" />    
</Target> 

这将在文件生成后有效地删除它们,虽然不如首先创建它们,但它对我有用。

答案 7 :(得分:0)

我为.NET Core 3找到了一个很好的答案

只需将ExcludeAssets =“ All”添加到程序包引用中即可。

<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.0.0" ExcludeAssets="All" />

这是Microsoft社区上原始帖子的链接: https://forums.asp.net/post/6281458.aspx

答案 8 :(得分:0)

对于VS 2019中的.net 4.6.1 ... 使用NuGet管理器作为解决方案,我只是单击了“卸载选项”下的“删除依赖项”。这似乎对我有用。

答案 9 :(得分:-1)

只需在解决方案资源管理器中单击更改属性的项目,然后在“属性”选项卡中将“本地复制”更改为False。

答案 10 :(得分:-1)

所有给定的解决方案都不适合我。 但是接受的答案 - 尽管评分很低 - 确实让我走上了正确的轨道。

我生成的每个文化文件夹的内容如下所示:

enter image description here

这使我得出结论,创建这些文件的 Nuget 包不是经常提到的 Microsoft.VisualStudio.Web.CodeGeneration.Design 包,而是我最近安装的 XUnit 和 Test 包之一。通过反复试验,我终于找到了罪魁祸首和适合我的解决方案:

我像这样将 ExcludeAssets="All" 添加到 .csproj 中的 Microsoft.NET.Test.Sdk 包中...

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.9.4" ExcludeAssets="All" />

...文化文件夹消失了。

所以我对解决一般问题的建议是:

  • 查看生成的文化文件夹。
  • 根据这些文件夹中的文件名称,尝试确定哪个 Nuget 包可能负责生成。
  • ExcludeAssets="All" 添加到 .csproj 文件中的相应 <PackageReference>
  • 继续使用更多 PackageReferences 执行此操作,直到构建时文化文件夹消失。

免责声明:
我仍在使用 VS 2017 和 Core 2.2,这可能是使用 SatelliteResourceLanguages 的通用解决方案对我不起作用的原因。