首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dotnet还原解决方案是在从.net操作调用时恢复项目,就像它们是GitHub框架项目一样

dotnet还原解决方案是在从.net操作调用时恢复项目,就像它们是GitHub框架项目一样
EN

Stack Overflow用户
提问于 2022-08-29 15:55:21
回答 1查看 834关注 0票数 1

我有一个包含许多项目的解决方案,我们正在迁移到.NET SDK风格的项目,但目前我们有一个.NET框架风格项目和.NET style项目的组合。

我们还在迁移到GitHub操作,这个解决方案之前构建时没有错误,但是当dotnet从6.0.300更新到6.0.400 (更新:我尝试在setup-dotnet操作中专门针对6.0.300,但它抛出了相同的错误,所以我不知道是什么改变导致它在以前工作时这样失败),还原操作开始失败。

我将我们的本地操作服务器更新为6.0.400,当我运行命令dotnet restore ./path/to/solution.sln时,它正在为.NET SDK风格的项目恢复NuGet包。

dotnet与此GitHub操作一起安装。

代码语言:javascript
复制
    - name: Setup .NET
      uses: actions/setup-dotnet@v2
      with:
        dotnet-version: 6.0.x

并使用此GitHub操作调用restore

代码语言:javascript
复制
    - name: Restore dependencies
      run: dotnet restore ${{env.SOLUTION_FILE_PATH}}

dotnet restore从GitHub操作运行时,我将得到所有.NET SDK样式项目的错误error MSB4057: The target "Restore" does not exist in the project.。这就好像它试图使用旧的NuGet框架风格的NuGet包来恢复NuGet包一样。这和我以前看到的完全不同,而且是出乎意料的。我有一个单独的操作来调用nuget restore ./path/to/solution.sln来恢复.NET框架样式项目的包,并且我希望dotnet restore只还原.NET style项目。

有没有其他人在dotnet 6.0.400中遇到类似的问题?在NuGet操作中是否有更好的恢复GitHub包的选项?

我不确定下一步该在哪里查找,因为在本地运行命令行命令完全符合我的预期,而且只有在从GitHub操作调用时才会有奇怪的行为。

更新:我已经能够通过运行本地安装的作为的一部分的dotnet版本在本地再现故障

如果我从全局安装位置C:\ Files\dotnet\dotnet.exe运行Files\dotnet\dotnet.exe,那么我将得到如下输出,这正是我所期望的

确定要恢复的项目。

恢复C:\actions-runner\_work\MySolution\MySolution\src\FirstSdkProject\FirstSdkProject.csproj ( 335 ms)。恢复C:\actions-runner\_work\MySolution\MySolution\src\SecondSdkProject\SecondSdkProject.csproj ( 357 ms)。

如果我在C:\Users\MyUser\AppData\Local\Microsoft\dotnet上从本地安装的dotnet恢复,那么我在GitHub操作中得到了意外的输出

确定要恢复的项目。

决定恢复的项目..。

C:\actions-runner\_work\MySolution\MySolution\src\FirstSdkProject\FirstSdkProject.csproj : error MSB4057:项目中不存在目标“还原”。

没什么可做的。指定的任何项目都不包含要还原的包。

决定恢复的项目..。

没什么可做的。指定的任何项目都不包含要还原的包。

没什么可做的。指定的任何项目都不包含要还原的包。

决定恢复的项目..。

C:\actions-runner\_work\MySolution\MySolution\src\SecondSdkProject\SecondSdkProject.csproj : error MSB4057:项目中不存在目标“还原”。

没什么可做的。指定的任何项目都不包含要还原的包。

没什么可做的。指定的任何项目都不包含要还原的包。

决定恢复的项目..。

没什么可做的。指定的任何项目都不包含要还原的包。

没什么可做的。指定的任何项目都不包含要还原的包。

没什么可做的。指定的任何项目都不包含要还原的包。

没什么可做的。指定的任何项目都不包含要还原的包。

比较dotnet.exe上的信息,它们是dotnet的完全相同的版本,使用文件比较程序它们是二进制的相同的,它们所在的文件夹看起来也是一样的,只有几个小的区别。为什么运行restore会有两个非常不同的结果,只是运行在不同的位置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-01 21:14:32

.NET框架项目和.NET SDK项目的主要区别之一是如何管理NuGet包引用。使用.NET框架项目,NuGet引用在packages.config中进行管理。要构建和还原包括packages.config引用在内的数据,您需要以下内容

msbuild -t:build -restore -p:RestorePackagesConfig=true ./path/to/solution.sln

如果您没有混合项目,并且它们都遵循.NET SDK格式,那么您将没有任何packages.config引用,您可以用它构建和恢复。

msbuild -t:build -restore ./path/to/solution.sln

选项RestorePackagesConfig仅在msbuild 16.5+ https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#restoring-packagereference-and-packagesconfig-projects-with-msbuild上可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73531447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档