为啥我的构建服务器中的部署包有额外的程序集?
Posted
技术标签:
【中文标题】为啥我的构建服务器中的部署包有额外的程序集?【英文标题】: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 目录中。奇怪的是程序集没有标记为本地复制。
【问题讨论】:
【参考方案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。以上是关于为啥我的构建服务器中的部署包有额外的程序集?的主要内容,如果未能解决你的问题,请参考以下文章
部署程序集和CLASSNOTFOUND Java / MySQL问题
混合模式程序集是针对运行时的“v2.0.50727”版本构建的