Microsoft.Build 无法找到 SDK 或 SDK 解析器
Microsoft.Build Unable to Locate SDK or SDK Resolver
我正在尝试使用 Microsoft.Build 包自动更新一些解决方案和项目文件,但遇到了诸如 the SDK Resolver folder exists but without an SDK Resolver DLL or manifest file.
之类的问题,我也遇到了无法找到 Microsoft.Net.SDK
不幸的是我没有捕捉到。
最终我通过添加对 Microsoft.Build.Runtime 的引用而走得更远,但后来我得到了 Could not load SDK Resolver. A manifest file exists, but the path to the SDK Resolver DLL file could not be found
。
我能找到的所有答案都是关于现有构建系统中的运行时错误,而不是直接利用 MSBuild 库。
如何使用 Microsoft.Build 以编程方式访问项目文件?
事实证明,答案位于 Microsoft 文档(“以编程方式使用 MSBuild”)中的一个合理位置,只是页面名称本身并不直观。它的标题为 Update to MSBuild 15 并给出了以下解决方案:
- 参考 Microsoft.Build.Locator (NuGet/GitHub)
- 在
PackageReference
中为 Microsoft.Build
添加 ExcludeAssets="runtime"
- 容易记住,因为如果不这样做,MSBuildLocator 将导致 compile-time 错误
- 在调用任何使用 MSBuild 的方法之前先在代码中调用
MSBuildLocator.RegisterDefaults();
来自工作 csproj 的示例:
...
<PackageReference Include="Microsoft.Build" Version="16.8.0">
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Build.Locator" Version="1.4.1" />
...
更多背景可以在this GitHub Issue on the MSBuild repo中找到。据我了解,MSBuild 工具位置过去存储在注册表中,Microsoft.Build 库仍然在那里,但是当添加对 Visual Studio SKU 的 side-by-side 安装的支持时,这不是支持时间更长。
我正在尝试使用 Microsoft.Build 包自动更新一些解决方案和项目文件,但遇到了诸如 the SDK Resolver folder exists but without an SDK Resolver DLL or manifest file.
之类的问题,我也遇到了无法找到 Microsoft.Net.SDK
不幸的是我没有捕捉到。
最终我通过添加对 Microsoft.Build.Runtime 的引用而走得更远,但后来我得到了 Could not load SDK Resolver. A manifest file exists, but the path to the SDK Resolver DLL file could not be found
。
我能找到的所有答案都是关于现有构建系统中的运行时错误,而不是直接利用 MSBuild 库。
如何使用 Microsoft.Build 以编程方式访问项目文件?
事实证明,答案位于 Microsoft 文档(“以编程方式使用 MSBuild”)中的一个合理位置,只是页面名称本身并不直观。它的标题为 Update to MSBuild 15 并给出了以下解决方案:
- 参考 Microsoft.Build.Locator (NuGet/GitHub)
- 在
PackageReference
中为Microsoft.Build
添加ExcludeAssets="runtime"
- 容易记住,因为如果不这样做,MSBuildLocator 将导致 compile-time 错误
- 在调用任何使用 MSBuild 的方法之前先在代码中调用
MSBuildLocator.RegisterDefaults();
来自工作 csproj 的示例:
...
<PackageReference Include="Microsoft.Build" Version="16.8.0">
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Build.Locator" Version="1.4.1" />
...
更多背景可以在this GitHub Issue on the MSBuild repo中找到。据我了解,MSBuild 工具位置过去存储在注册表中,Microsoft.Build 库仍然在那里,但是当添加对 Visual Studio SKU 的 side-by-side 安装的支持时,这不是支持时间更长。