【问题标题】:Why does the deployment package from my buildserver have additional assemblies?为什么我的构建服务器中的部署包有额外的程序集?
【发布时间】:2011-08-02 00:45:35
【问题描述】:

我有一个 asp.net mvc 部署包,我正在尝试与 team city 一起构建。包构建没有任何问题,但 bin 文件夹包含不需要的文件(并导致站点在存在时失败)。

如果我从 Visual Studio 构建相同的包,则其他文件不存在。

附加文件是:

Microsoft.VisualBasic.Activities.Compiler.dll
mscorlib.dll
normidna.nlp
normnfc.nlp
normnfd.nlp
normnfkc.nlp
normnfkd.nlp
System.Data.dll
System.Data.OracleClient.dll
System.EnterpriseServices.dll
System.EnterpriseServices.Wrapper.dll
System.Transactions.dll

如何防止这些额外的程序集和 .nlp 文件包含在包中?

更新

在深入挖掘日志文件后,我发现_CopyFilesMarkedCopyLocal 构建任务正在将文件复制到 bin 目录中。奇怪的是程序集没有标记为本地复制。

【问题讨论】:

    标签: .net visual-studio-2010 teamcity


    【解决方案1】:

    经过一番挖掘后,我注意到构建服务器启用了 .Net 框架,但没有框架 SDK。在构建服务器上安装 SDK 后,不再添加其他程序集。

    【讨论】:

    • 你必须安装什么?我不想在构建服务器上安装 VisualStudio 来获取该 SDK - 您是否安装了另一个?
    • 我的构建服务器运行的是 Windows 7,所以我安装了这个:microsoft.com/downloads/en/…
    • 具体来说,我发现需要从 Web Installer 安装“Intellisense and Reference Assemblies”功能。
    • 需要注意的是,.NET 4.5 也是如此。我必须安装“Windows SDK for Windows 8”的“.NET Framework 4.5 Software Development Kit”选项,以便将这些文件从我们构建服务器上的构建目录中清除。
    • 即使在构建服务器上安装了 sdk_tools4.msi 后,我也遇到了类似的问题。我注意到构建服务器中缺少 .net 4.5 参考程序集。所以我复制了 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5* 在同一路径上构建服务器。这解决了这个问题。
    【解决方案2】:

    我在安装了only had 4.5.1 sdk 的构建服务器上遇到了同样的问题。

    修复

    p:FrameworkPathOverride 参数添加到msbuild。例如:

    msbuild /p:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1"
    

    【讨论】:

    • 如果我能投票 100 次,我会的。我遇到了一个问题,清单文件包含我不需要的依赖项,也没有指定为 clickonce 包的一部分(破坏了我的 clickonce 应用程序)。我意识到 .nlp 是问题所在,需要一种方法来防止它们。这成功了谢谢!
    【解决方案3】:

    最简单的解决方案是将我的本地 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework 复制到构建服务器

    【讨论】:

      【解决方案4】:

      在运行 Windows Server 2012 R2 的构建服务器上,我遇到了类似的问题 - 以下任务是将不需要的文件复制到输出目录:

      [06:47:07]_CopyFilesMarkedCopyLocal
      [06:47:07]Copy
      [...]
      [06:47:07]Copying file from "C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll" to "bin\Release\mscorlib.dll".
      [06:47:07]Copying file from "C:\Windows\Microsoft.NET\Framework\v4.0.30319\normidna.nlp" to "bin\Release\normidna.nlp".
      [06:47:07]Copying file from "C:\Windows\Microsoft.NET\Framework\v4.0.30319\normnfc.nlp" to "bin\Release\normnfc.nlp".
      [06:47:07]Copying file from "C:\Windows\Microsoft.NET\Framework\v4.0.30319\normnfd.nlp" to "bin\Release\normnfd.nlp".
      [06:47:07]Copying file from "C:\Windows\Microsoft.NET\Framework\v4.0.30319\normnfkc.nlp" to "bin\Release\normnfkc.nlp".
      [06:47:07]Copying file from "C:\Windows\Microsoft.NET\Framework\v4.0.30319\normnfkd.nlp" to "bin\Release\normnfkd.nlp".
      

      与@ilivewithian 的答案类似,缺少一个包:Microsoft .NET Framework 4.5.2 Developer Pack for Windows Vista SP2, Windows 7 SP1, Windows 8, Windows 8.1, Windows Server 2008 SP2 Windows Server 2008 R2 SP1, Windows Server 2012 and Windows Server 2012 R2

      【讨论】:

      • 我忘了提到,复制不需要的文件的构建是针对 .NET Framework 4.5.2。 @cacau,在您的情况下,它可能是缺少某些开发包或 SDK 的 .NET Framework 的不同版本。
      • 嗯 - 我们的目标是 4.5,所以我认为 4.5.2 SDK 应该没问题?
      • @cacau,根据Overview of .NET SDKs and Downloads,我猜4.5 你需要Visual Studio 2012+ 或在你的构建服务器上安装Windows Software Development Kit (SDK) for Windows 8
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2014-06-16
      • 2010-11-03
      • 2018-04-05
      • 1970-01-01
      • 2023-03-12
      • 2016-04-08
      相关资源
      最近更新 更多