Rod*_*Rod 4 c# msbuild visual-studio nuget
我正在帮助一位无法在我们的 TFS 2015 构建服务器中构建 Visual Studio WPF 项目的同事。我已将他的代码的最新版本拉入(获取最新版本)到我的 VS 2019 实例中。我无法在我的开发盒上构建它。当我尝试在我的开发盒上构建解决方案时,我收到如下错误:
XML 命名空间“http://firstfloorsoftware.com/ModernUI”中不存在标签“ModernDialog”。XML 命名空间“http://schemas.microsoft.com/expression/2010/interactivity”中不存在标签“Interaction.Triggers”。
当我的同事将更改签入 TFS 时,它失败并出现如下错误:
无法找到包“MvvmLightLibs”的版本“5.2.0”。无法找到包“ModernUI.WPF”的版本“1.0.9”。
我首先尝试更新他在项目中拥有的 NuGet 包,但效果不佳。即使恢复到最新版本也无法在我的机器上构建。
我同事的方法是从 Visual Studio 解决方案中剥离所有 NuGet 包,然后四处寻找 DLL,然后将它们放入项目中并在项目中引用它们。它确实在他的系统上构建,但不在 TFS 构建服务器上。
所以,我一直在寻找可能的原因。我发现了这个 Microsoft 文档Migrate from packages.config to PackageReference。我对packages.config 或PackageReference 都不熟悉,但我感觉PackageReference 是包含NuGet 包的“首选”方式。
这会产生问题。目前我们的TFS构建服务器的Visual Studio最高版本是VS 2015。根据引用的文章,VS 2015使用packages.config文件。任何比 VS 2015 更新的东西都使用包(我认为是 PackageReference)。
我将失败的 WPF 解决方案与我开发的另一个在构建服务器上构建良好的解决方案进行了比较。构建的解决方案(我将其称为 SolutionA)在解决方案的根目录下有一个 packages 文件夹,但解决方案中的每个项目中也有packages.config 文件。无法构建的解决方案(我将其称为 SolutionB)在其根目录下有一个 packages 文件夹,在单元测试项目中有一个packages.config 文件。(我认为单元项目构建得很好。)
尽管我们使用的是较新版本的 Visual Studio,但我怀疑生成服务器遇到的问题是由于生成服务器具有旧版本的 Visual Studio 造成的。我们的 Visual Studio 许可证数量有限,因此我无法将较新版本的 Visual Studio 放在生成服务器上。那么,如何将这些packages.config 文件放入每个项目中呢?
首先,您的解决方案实际上使用packages.confignuget 管理格式。这种格式使得每个项目都有一个名为 的文件packages.config,其中列出了所有 nuget 包及其版本。packages.config这就是nuget管理格式的特点。因此,您还应该确保已将该文件提交到TFS中。
其次,迁移packages.config到PackageReference并不是一件容易的事,应该使用VS IDE来完成。大多数情况下,您必须对csproj项目的每个文件进行重大更改。实际上,PackageReference是灵活且轻量级的,它没有packages.config存储所有 nuget 包的文件和包文件夹。只需将它们直接嵌入到 proj 文件中即可。到目前为止,PackageReference是主流。
您的问题是,您没有在 TFS 构建上执行 nuget 恢复操作来使软件包文件夹下缺少的 nuget 包,以便构建过程能够找到这些 nuget 包并使其工作。
您应该添加nuget restore xxx\sln命令行或任务。
| 归档时间: |
|
| 查看次数: |
20813 次 |
| 最近记录: |