【发布时间】:2019-03-28 18:30:52
【问题描述】:
我正在开发一个使用 .net 框架 4.6.2 的 .net 类库项目。 该项目使用 NHibernate,并且确实包含大量 hbm.xml 文件,用于 db 表和实体之间的映射。 我项目中的 *.hbm.xml 文件具有构建操作“嵌入式资源”,并且在 csproj.files 中看起来像这样
当我在本地机器上调试或发布项目时(与 2017 (15.8.4) MSBuild 15.7.179 相比)一切正常,嵌入的资源包含在二进制文件中。
但是,当 Buildserver 克隆 git 存储库(在完全清除项目后)并编译项目时,嵌入的资源不包括在内。 Buildserver(我们使用 Teamcity)也安装了相同的 .net 框架版本 4.6.2 和 VS 2017(也与我的本地 PC 相同的版本)并且也使用 MSBuild 15.7.179
[12:21:37][步骤 2/7] 构建解决方案 ....\My***.sln
[12:21:37][步骤 2/7] 适用于 .NET Framework 的 Microsoft (R) Build Engine 版本 15.7.179.6572
此构建过程产生的二进制文件不包含任何(零)嵌入式资源
奇怪的是,当我在 Powershell 中运行构建命令时,在 Teamcity 的同一 Windows 帐户下,编译后的二进制文件确实包含嵌入式资源? 我们已经在构建服务器上重新启动并安装了最新的 Windows 更新。
我使用 JustDecomplile (Telerik) 来调查二进制文件。
有没有人知道这种奇怪行为的线索。
谢谢。
【问题讨论】:
-
您是如何知道那些未包含在二进制文件中的嵌入式资源的?当您在服务器上构建它时,有没有关于它的详细日志?如果您可以在构建服务器上使用 MSBuild 命令行成功构建它,那么它应该适用于您的 Teamcity,如果不能,这个问题应该与 Teamcity 的构建任务配置有关,您也可以将您的构建任务配置分享到你的问题。没有人可以给你一个准确的答案,如果只有一句话嵌入的资源不包含在二进制文件中。
标签: .net powershell msbuild visual-studio-2017