在编译时禁用 Dll 区域性文件夹

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

每个里面有2个 dls (Microsoft.Expression.Interactions.resources.dllSystem.Windows.Interactivity.resources.dll)。我到处搜索,但是找不到任何关于如何停止这种恼人的自动生成内容的相关信息。

25015 次浏览

这个问题有两个解决办法:

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

相关链接:
原始解决方案
在 Release 目录中通过 caliburn.micro 生成文件

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>

我使用其他解决方案。您可以在 VisualStudio 中为项目配置后期生成事件,这将删除冗余文件夹:

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

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

回答与本案无关

在程序集范围应用 系统。资源。中性资源。语言属性属性,如下所示:

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

(项目属性部分中的 AssemblyInfo.cs 文件是一个很好的位置)

我遇到了同样的问题(这里是 答案相似) ,但是其他的答案对我都不起作用,所以我只是在我的 Main“ 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>

这将在生成文件后有效地删除它们,虽然不如一开始不创建它们那么好,但对我来说很有效。

我为.NET Core 3找到了一个不错的答案

只需将 ExcludeAsset = “ All”添加到包引用中。

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

这是微软社区最初文章的链接: Https://forums.asp.net/post/6281458.aspx

我的项目使用 ASP.NET Core 3.1

将这一行添加到 * . csproj

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

对于.net 4.6.1 in VS 2019..。 使用 NuGet 管理器进行解决方案,我只需在卸载选项下单击“删除依赖项”。

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

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

然后您需要为包设置选项“ ExcludeAsset”。

点击这里查看 Visual Studio:

enter image description here

或者另一种方法是像下面这样直接修改 * . csproj 文件:

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

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

UPD: 我找到了第二个解决方案-这是另一种方法,让您选择您需要的本地文件夹。但是如果你这样做-再次删除“ bin”文件夹,并设置“ ExcludeAsset”选项的选择包默认值-空。

在 * . csproj 文件中添加标记“ SatelliteResourceLanguages”,如下所示

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

对于我的项目,我现在有默认的 en-US 语言环境和额外的‘ ru’语言环境。您可以在它们之间选择另一个区域设置,其中包含“ ;”。

在这里发现第二个解决方案 https://github.com/dotnet/sdk/issues/774

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

所有的解决方案都不适合我。 不过,这个被接受的答案——尽管评级不高——确实让我走上了正确的道路。

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

enter image description here

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

我在.csproj 中将 ExcludeAssets="All"添加到 Microsoft.NET.Test.Sdk包,如下所示..。

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

文化档案也不见了。

因此,我建议解决这个一般性问题:

  • 查看生成的区域性文件夹。
  • 试图从这些文件夹中的文件名确定哪个 Nuget 包负责生成。
  • 在. csproj 文件中将 ExcludeAssets="All"添加到相应的 <PackageReference>
  • 继续使用更多 PackageReferences 执行此操作,直到生成时区域性文件夹消失。

免责声明:
我仍然使用 VS 2017和 Core 2.2,这可能就是为什么使用 SateliteResourceLanguage 的通用解决方案不适合我的原因。

这是我在 csproj 文件中的可怕的解决方案。我希望 SateliteResourceLanguage 解决方案能起作用。我的项目有很多参考资料,我不确定现在是哪些引起了问题,也不知道将来哪些新项目会引起问题。因此,这个严厉的解决方案是:

<PostBuildEvent>
rd /s /q "$(TargetDir)de\" 2&gt;nul
rd /s /q "$(TargetDir)cs\" 2&gt;nul
rd /s /q "$(TargetDir)es\" 2&gt;nul
rd /s /q "$(TargetDir)fr\" 2&gt;nul
rd /s /q "$(TargetDir)it\" 2&gt;nul
rd /s /q "$(TargetDir)ja\" 2&gt;nul
rd /s /q "$(TargetDir)ko\" 2&gt;nul
rd /s /q "$(TargetDir)pl\"&gt;2&gt;nul
rd /s /q "$(TargetDir)pt-BR\" 2&gt;nul
rd /s /q "$(TargetDir)ru\" 2&gt;nul
rd /s /q "$(TargetDir)tr\" 2&gt;nul
rd /s /q "$(TargetDir)zh-Hans\" 2&gt;nul
rd /s /q "$(TargetDir)zh-Hant\" 2&gt;nul
</PostBuildEvent>