我有一个包含许多项目的解决方案,我们正在迁移到.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操作一起安装。
- name: Setup .NET
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x并使用此GitHub操作调用restore
- 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会有两个非常不同的结果,只是运行在不同的位置?
发布于 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上可用。
https://stackoverflow.com/questions/73531447
复制相似问题