我有一个基于微软默认模板的roslyn分析器项目。我可以很容易地在Visual Studio或msbuild中构建分析器。
问题是解决方案中包含一个vsix项目,它依赖于dotnet build不支持的microsoft.vssdk.buildtools
。这会导致在命令行中使用dotnet build构建解决方案时出现错误消息:microsoft.vssdk.buildtools\17.4.2119\tools\VSSDK\Microsoft.VsSDK.targets(826,5): error : VSIX deployment is not supported with 'dotnet build'
在使用Visual Studio进行开发时,vsix是一个不错的工具,但是我确实通过NuGet包而不是vsix发布了我的分析器,所以我不需要CLI上的vsix。
有没有办法在csproj中指定,当从dotnet build调用它时,我不希望它被构建?如果可能的话,我希望避免使用单独的sln文件或特定的dotnet配置来排除项目。
1条答案
按热度按时间luaexgnf1#
两种可能的方法包括使用解决方案筛选器和将项目更改为在某些条件下不生成。
使用解决方案筛选器
dotnet build
将接受解决方案筛选器文件(.slnf)。要创建解决方案筛选器:
1.在Visual Studio中打开解决方案
1.移至方案总管 windows
1.右键单击VSIX项目,选择“卸载项目”
1.右击解决方案,选择“另保存为解决方案筛选器”
使用dotnet建置时,必须使用.slnf。使用.sln档案或VSIX项目档搭配dotnet将会发生错误。
检测何时从dotnet build调用
MSBuild中没有已定义的属性或函数来标识运行MSBuild引擎的可执行文件。
但是,有一个
MSBuildRuntimeType
属性。在MSBuild 15之前,
MSBuildRuntimeType
是未定义的。在MSBuild 15和更新版本中,MSBuildRuntimeType
的值为Full
、Core
或Mono
。根据documentation,当使用dotnet build
时,MSBuildRuntimeType
将具有Core
的值。(此外,仅当'$(MSBuildRuntimeType)' == 'Core'
时,才会显示错误消息“VSIX部署不支持”dotnet build“”。)没有“退出生成”任务,因此项目无法检测并结束。我们需要在项目真正开始之前进行检测。但是在项目中 Package 项目是很笨拙的,特别是如果您希望能够从Visual Studio IDE中使用项目并更改属性。
可以重新定义目标,并且
Import
可以具有条件。当MSBuildRuntimeType
为Core
时,可以导入文件,并且该文件可以重新定义'Build'目标。添加到VSIX项目文件:
noop.目标可能包含以下内容:
希望这能有所帮助,或者至少提供一些想法。