【问题标题】:Disable Dll Culture Folders on Compile编译时禁用 Dll 文化文件夹
【发布时间】:2013-12-03 03:01:31
【问题描述】:

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

每个内部都有 2 个 dll(Microsoft.Expression.Interactions.resources.dllSystem.Windows.Interactivity.resources.dll)。我在 Google 上四处搜索,但找不到任何与如何阻止这种烦人的自动生成内容相关的信息。

【问题讨论】:

  • 你确定你searched enough
  • 是的,这些答案都不起作用,即使是那个家伙的 hacky 解决方法。
  • @AlexForbes-Reed 你解决了这个问题吗?怎么样?
  • 不,从来没有解决过。现在构建服务器只是将它们剥离出来。

标签: c# .net wpf culture


【解决方案1】:

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

将此行添加到您的 *.csproj

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

【讨论】:

  • 这对我有用。请说明您是如何偶然发现此信息的。非常感谢。
  • 我的项目是一个 .NET Core 3.1 WPF 桌面应用,只有 Nuget 引用了 Microsoft.Expression.Interactions.dll 和 System.Windows.Interactivity.dll。
  • 这适用于 sdk csproj 文件格式。摆脱了 Microsoft.Win32.TaskScheduler.dll 资源文件。谢谢
  • +1 为我工作。 docs 解释它是如何工作的。
【解决方案2】:

这个问题有两种解决方法:

  • 复制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

【讨论】:

  • 如果您在使用 ReportViewer 时遇到此问题,您可以从 C:\Program Files (x86)\Microsoft SQL Server\140\SDK\Assemblies 中删除文件夹。
  • 确认从 SDK 目录中删除文件夹有效。请注意,您可能还需要在 v4.0 文件夹或其他文件夹中执行相同的操作,具体取决于您已安装的 SDK 以及您的应用所针对的 FW。
【解决方案3】:

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

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

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

【讨论】:

  • 构建后事件使 Visual Studio 倾向于重新构建项目,即使它们没有改变。
【解决方案4】:

我为 .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

【讨论】:

  • 对我不起作用。我正在使用 .NET Core 3.0 和 .NET Core 3.1
  • 对我来说这是 Microsoft.VisualStudio.Web.CodeGeneration.Design 的问题,当我添加 ExcludeAssets="All" 时,文件夹不再出现。您可能需要先清理构建文件夹。
  • 请告诉我你从这个列表中安装了哪些库:nuget.org/packages?q=Microsoft.VisualStudio.Web.CodeGeneration?也许在我的项目中,缺少一些东西。
  • @al.koval 我在示例中只有这个。
  • 通过在* .cproj 文件stackoverflow.com/a/60655083/2553037 中添加“ en ”行解决了问题
【解决方案5】:

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

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

然后你需要为包设置选项'ExcludeAssets'。

在 Visual Studio 中:

或者另一种方法是直接更改 *.csproj 文件,如下所示:

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

对我来说它解决了问题。

统一更新: 我找到了第二个解决方案 - 这是另一种让您选择所需的语言环境文件夹的方法。但是如果你这样做 - 再次删除'bin'文件夹并将所选包的'ExcludeAssets'选项设置为默认值 - 空。

在 *.csproj 文件中添加标签 'SatelliteResourceLanguages' 像这样

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

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

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

【讨论】:

  • 为什么这些东西会被添加到我的部署中?看起来像是 Visual Studio 设计人员需要的东西,而不是我的 Web 应用程序的用户需要的东西。笨蛋!
  • 在 .netcore 3.1 中唯一对我有用的是这个答案的第二部分。
  • @OffirPe'er 这有点神奇。我在我真正的 .net core 3.1 项目上测试了这两种解决方案,两者都有效,我认为第二个更明显。还有一件事我发现并且仍然无法击败 - 两种解决方案都适用于项目的构建/重建。但是如果我使用 VS 发布我的项目,我仍然会在发布目录中获取所有语言环境文件夹,但我仍然无法修复它。
  • 这里和 Offir 一样。
【解决方案6】:

我遇到了同样的问题(similar answer 此处),但没有其他答案对我有用,所以我所做的是将以下几行添加到我的 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> 

这将在文件生成后有效地删除它们,不如一开始就不创建它们,但它对我有用。

【讨论】:

    【解决方案7】:

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

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

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

    【讨论】:

    • 对于所有未来的读者,这个答案当时确实有效,但确实不再相关。
    • VS 2017 现在无法重现,但是同时添加 [assembly: AssemblyCulture("en")] [assembly: System.Resources.NeutralResourcesLanguageAttribute("en")] 删除了我所有可怕的文件夹。
    • 请更新答案正文,并注明这些天答案不再相关。
    【解决方案8】:

    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>
    

    【讨论】:

    • 试过这个,不能让它工作。也许展示更多你的csproj?比如这个节点到底需要放在哪里?
    【解决方案9】:

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

    【讨论】:

      【解决方案10】:

      这是我在 csproj 文件中的可怕解决方法。我希望 SatelliteResourceLanguages 解决方案有效。我的项目有很多引用,现在我不确定是哪个导致了问题,也不知道将来哪些新的会导致问题。所以这个强硬的解决方案:

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

      【讨论】:

        【解决方案11】:

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

        【讨论】:

          【解决方案12】:

          给定的解决方案都不适合我。 但被接受的答案——尽管评价不佳——确实让我走上了正轨。

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

          这让我得出结论,创建这些文件的 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 文件中对应的&lt;PackageReference&gt;
          • 继续使用更多 PackageReferences 执行此操作,直到构建时文化文件夹消失。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-01-17
            • 2022-12-03
            • 1970-01-01
            • 2020-10-03
            • 1970-01-01
            • 2013-11-29
            • 1970-01-01
            相关资源
            最近更新 更多