MSBuild 无法通过引用 Bcl 相关库来构建网站
MSBuild fail to build web site with reference a Bcl related library
我有 2 个项目 (.Net 4.0)
- 一个class库(DataProvider)
- 添加对 Bcl.Async 库的引用(通过 nuget)
- 提供一些异步方法
- 一个网站 (SampleSite)
- 参考"DataProvider"
问题:
- 当我使用 Visual studio 构建时,一切都很好(我使用 VS 2017 Community)
- 尝试使用 MSBuild (MSBuild /target:rebuild /p:Configuration=Release /m:4) 时,我收到此警告“..\WebSite1_1_.metaproj”(重建目标)(2) ->
..\WebSite1_1_.metaproj:警告 MSB3268:无法解析主要引用“...\WebSite1\DataProvider\bin\Debug\DataProvider.dll”,因为它间接依赖于框架程序集
"System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 无法在当前目标框架中解决。 “.NETFramework,版本=v4.0”。
要解决此问题,请删除引用“...\WebSite1\DataProvider\bin\Debug\DataProvider.dll”或将您的应用程序重新定位到包含 "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"."
的框架版本
- 最新的 DataProvider dll 不会被复制到 "SampleSite" 的 Bin 文件夹,如果我使用 DataProvider 中的一些新东西,我会得到错误(构建失败)
我到处搜索,包括 Whosebug。但是我找不到任何与我的场景相关的东西。
我试过了:
- 更新应用config/web.config
- 将 BCL dll 复制到 .Net 4.0 引用程序集文件夹
- 通读这篇文章(https://blogs.msdn.microsoft.com/bclteam/p/asynctargetingpackkb/),但找不到解决我的问题的方法
(此题无代码)
我的期望:
- 我可以使用 MSBuild 或其他自动解决这个问题(因为这个问题是在我的构建服务器上自动发生的)
更新图片
- 解决方案
- 刚刚向 DataProvider 添加了新的 属性:
- 在网站上正常使用:
- MSBuild 输出:
- DataProvider 项目:
如果我右击"WebSite2" -> 建立网站,一切都会好起来的。但我想使用 msbuild 进行自动化工作
我现在可以在我的机器上重现同样的问题(详情参见#4594),因为它与 #5993, I report it in msbuild
instead of dotnet cli
. Issue reported to Msbuild 4594.
有一些不同
可以在命令行中使用的解决方法是使用 devenv 命令。
但是它需要我们在构建机器上安装VS,然后我们可以使用devenv command
like:
使用 -Rebuild
开关可以很好地工作,就像它在 VS 中的行为一样。参见 Remark1。
在我看来,如果我们在 vs 中构建这个特定的解决方案,它可能会比单独 msbuild.exe 做更多的动作。这就是为什么它在 vs 而不是 msbuild 命令行中运行良好的原因。
所以如果我们需要自动在构建服务器中构建这个特定的网站,我们可以尝试使用 devenv 命令。(要查看构建输出,似乎使用 devenv.com
比使用 devenv.exe
更好,参见 this)
希望对您有所帮助,我们在4594中跟踪问题。
我有 2 个项目 (.Net 4.0)
- 一个class库(DataProvider)
- 添加对 Bcl.Async 库的引用(通过 nuget)
- 提供一些异步方法
- 一个网站 (SampleSite)
- 参考"DataProvider"
问题:
- 当我使用 Visual studio 构建时,一切都很好(我使用 VS 2017 Community)
- 尝试使用 MSBuild (MSBuild /target:rebuild /p:Configuration=Release /m:4) 时,我收到此警告“..\WebSite1_1_.metaproj”(重建目标)(2) -> ..\WebSite1_1_.metaproj:警告 MSB3268:无法解析主要引用“...\WebSite1\DataProvider\bin\Debug\DataProvider.dll”,因为它间接依赖于框架程序集 "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 无法在当前目标框架中解决。 “.NETFramework,版本=v4.0”。 要解决此问题,请删除引用“...\WebSite1\DataProvider\bin\Debug\DataProvider.dll”或将您的应用程序重新定位到包含 "System.Runtime, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"." 的框架版本
- 最新的 DataProvider dll 不会被复制到 "SampleSite" 的 Bin 文件夹,如果我使用 DataProvider 中的一些新东西,我会得到错误(构建失败)
我到处搜索,包括 Whosebug。但是我找不到任何与我的场景相关的东西。
我试过了:
- 更新应用config/web.config
- 将 BCL dll 复制到 .Net 4.0 引用程序集文件夹
- 通读这篇文章(https://blogs.msdn.microsoft.com/bclteam/p/asynctargetingpackkb/),但找不到解决我的问题的方法
(此题无代码)
我的期望:
- 我可以使用 MSBuild 或其他自动解决这个问题(因为这个问题是在我的构建服务器上自动发生的)
更新图片
- 解决方案
- 刚刚向 DataProvider 添加了新的 属性:
- 在网站上正常使用:
- MSBuild 输出:
- DataProvider 项目:
如果我右击"WebSite2" -> 建立网站,一切都会好起来的。但我想使用 msbuild 进行自动化工作
我现在可以在我的机器上重现同样的问题(详情参见#4594),因为它与 #5993, I report it in msbuild
instead of dotnet cli
. Issue reported to Msbuild 4594.
可以在命令行中使用的解决方法是使用 devenv 命令。
但是它需要我们在构建机器上安装VS,然后我们可以使用devenv command
like:
使用 -Rebuild
开关可以很好地工作,就像它在 VS 中的行为一样。参见 Remark1。
在我看来,如果我们在 vs 中构建这个特定的解决方案,它可能会比单独 msbuild.exe 做更多的动作。这就是为什么它在 vs 而不是 msbuild 命令行中运行良好的原因。
所以如果我们需要自动在构建服务器中构建这个特定的网站,我们可以尝试使用 devenv 命令。(要查看构建输出,似乎使用 devenv.com
比使用 devenv.exe
更好,参见 this)
希望对您有所帮助,我们在4594中跟踪问题。