【问题标题】:MSBuild fail to build web site with reference a Bcl related libraryMSBuild 无法通过引用 Bcl 相关库来构建网站
【发布时间】:2019-12-13 21:43:19
【问题描述】:

我有 2 个项目 (.Net 4.0)

  • 一个类库(DataProvider)
    • 添加对 Bcl.Async 库的引用(通过 nuget)
    • 提供一些异步方法
  • 网站 (SampleSite)
    • 对“DataProvider”的引用

问题:

  • 当我使用 Visual Studio 构建时,一切都很好(我使用 VS 2017 社区)
  • 尝试使用 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 中的一些新内容,我会收到错误(构建失败)

我已经搜索过,包括 StackOverFlow。但我找不到与我的场景相关的任何内容。

我试过了:

(这个问题没有代码)

我的期望:

  • 我可以使用 MSBuild 或其他东西自动解决这个问题(因为这个问题是在我的构建服务器上自动发生的)

更新图片

  • 解决方案
  • 刚刚向 DataProvider 添加了新属性:
  • 在网站上正常使用:
  • MSBuild 输出:
  • DataProvider 项目:

如果我右键单击“WebSite2”-> 建立网站,一切都会好起来的。但我想使用 msbuild 进行自动化工作

【问题讨论】:

  • 这是Microsoft.Bcl.Async 包的已知问题,请参阅dotnet/cli 5993#。如果您的 .net 4.0 项目是 SDK 格式,我认为它们是相同的问题。
  • 就我而言,只有关于 BCL 的警告。问题只有在我使用 MsBuild 时,Visual Studio 没问题,我可以编写代码、构建、调试...等
  • 其实,如果你在VS中新建一个简单的类库在同一个解决方案中,并添加对DataProvider项目的引用,即使在VS中也可以得到警告。
  • 是的,但是如果“SampleSite”是一个 WebApplication 也没关系。在我的例子中,它是一个网站,当添加对“DataProvider”的引用时,它会将 DataProvider.dll 复制到“SampleSite”的 Bin 文件夹中。如果我用 VisualStudio 构建,DataProvider.dll 会更新,并且在“SampleSite”中使用的“DataProvider”的新代码是可以的。如果我使用 MSBuild,它会显示警告,然后在构建“SampleSite”时显示错误(这意味着 DataProvider.dll 未更新)
  • DataProvider的工程文件是什么格式的?新 sdk 格式还是旧格式?

标签: .net visual-studio web msbuild base-class-library


【解决方案1】:

我现在可以在我的机器上重现同样的问题(详情见 #4594),因为它与 #5993 有一些不同,我在 msbuild 而不是 dotnet cli 中报告它。问题报告给Msbuild 4594

可以在命令行中使用的解决方法是使用devenv 命令。

但它需要我们在构建机器中安装VS,然后我们可以使用devenv command,例如:

使用-Rebuild 开关可以像它在 VS 中一样工作。见Remark1

在我看来,如果我们在 vs 中构建这个特定的解决方案,它可能会比单个 msbuild.exe 执行更多的操作。这就是为什么它在 vs 而不是 msbuild 命令行中运行良好的原因。

所以如果我们需要自动在构建服务器中构建这个特定的网站,我们可以尝试使用 devenv 命令。(要查看构建输出,似乎使用devenv.com 比使用@987654333 更好@,见this)

希望能有所帮助,让我们在 4594 中跟踪问题。

【讨论】:

  • 这项工作对我来说很好,我可以在我的构建机器上安装 vs。感谢在github上提问!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2010-11-25
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
相关资源
最近更新 更多