【问题标题】:Can I exclude Microsoft.Data.OData languages ressources from build?我可以从构建中排除 Microsoft.Data.OData 语言资源吗?
【发布时间】:2014-11-19 20:32:42
【问题描述】:

用于 c# 的 Azure Storage 2.0 客户端使用 Microsoft.Data.OData 库。 问题是在构建时我在我的构建文件夹中找到:

bin/de/Microsoft.Data.Edm.resources.dll
bin/de/Microsoft.Data.OData.resources.dll
bin/de/Microsoft.Data.Services.Client.resources.dll
bin/de/System.Spatial.resources.dll
bin/es/Microsoft.Data.Edm.resources.dll
bin/es/Microsoft.Data.OData.resources.dll
bin/es/Microsoft.Data.Services.Client.resources.dll
bin/es/System.Spatial.resources.dll

等语言 de、es、fr、it、ja、ko、ru、zh 两次

这使得我发送到 Azure 云实例的包中大约有 3.2 个月的我猜无用库。我希望我的包裹尽可能轻,以便快速发送。

我的应用程序设置为使用 Culture default 和culture FR-FR

排除所有其他语言是否安全?如何在构建时实现此排除?

这是我的网络配置

<runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
           <assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral" />
           <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
        </dependentAssembly>
        <dependentAssembly>
           <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
           <bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
        </dependentAssembly>
        <dependentAssembly>
           <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
           <bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
        </dependentAssembly>
        <dependentAssembly>
           <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
           <bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
        </dependentAssembly>
     </assemblyBinding>
  </runtime>

【问题讨论】:

  • 您可以随时进行构建后事件并删除它们,但我不知道它们是否需要。另一种选择是直接从源代码管理发布并从源代码管理中排除 nuget 包(将由构建服务器在构建时添加):azure.microsoft.com/en-us/documentation/articles/…
  • 这是一个很大的痛苦,浪费了我的发布时间,因为它坚持要我上传韩文、日文等。一方面,我不想在 NuGet 中看到所有这些不同的包,但是另一方面,我当然不希望它们都出现在我的发布资料中。
  • 为什么 MS 从一开始就添加这个库?在大多数情况下,这只是在搞乱我的部署。

标签: c# asp.net .net azure


【解决方案1】:

您可以做的一件事是修改您的.csproj 文件,挂钩AfterBuild 事件,然后删除除所需语言之外的所有文件夹。不是最佳的,但它应该工作。比如:

<Target Name="AfterBuild">
  <ItemGroup>
    <DirsToClean Include="$(OutDir)\de;$(OutDir)\es;..." />
  </ItemGroup>
  <RemoveDir Directories="@(DirsToClean)" />
</Target>

至于排除是否安全……不知道。 :)

【讨论】:

  • 这确实适用于网站项目的输出。太糟糕了,如果网站在云服务项目中用作网络角色,它就不起作用了。
  • (使用 WPF 项目工作)这是一个很好的解决方法,可以巧妙地绕过强制包含的二进制文件。比尝试与 Nuget 进行泥浆摔跤要容易得多。
【解决方案2】:

您可以尝试以下方法。您所说的资源是解决方案和输出的一部分,因为它们是引用的 Nuget 包的一部分。具体如下:

  • Microsoft.Data.OData 5.2.0
  • Microsoft.Data.Edm 5.2.0
  • System.Spatial 5.2.0

我不确定这些版本与该主题的相关性如何,但我创建了一个新的 ASP.NET MVC 4.5 Web 应用程序并添加了 Windows Azure Storage 2.0 包,因此它们被安装了。

现在,有一个名为 Nuget Package Explorer 的开源工具:http://npe.codeplex.com/

使用 NPE,您可以打开、查看和编辑 Nuget 包。您将在packages 目录中找到包含这些包的文件夹,该目录与您的解决方案所在的相对路径相同。

您需要使用 NPE 编辑包并删除对那里资源文件的引用并保存包。您还需要从packages 文件夹中删除实际的资源程序集。

您应该能够执行Clean Solution...Rebuild Solution 并看到没有这些引用的软件编译。

这种技术本质上是调整依赖项的配置以影响构建输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2021-01-04
    • 2016-01-16
    • 2020-11-23
    • 2015-03-10
    • 2010-10-29
    • 2010-12-22
    相关资源
    最近更新 更多