VSSDK:无法使用包含VSIX项目的混合样式csproj项目构建解决方案

时间:2017-10-25 18:13:38

标签: .net msbuild visual-studio-2017 vsix vs-extensibility

我有一个包含几个项目的解决方案,目标是net461和netcoreapp2.0。该解决方案还包含带有DslTools扩展的VSIX项目。 VSIX项目使用旧的csproj格式,而其他项目使用新的csproj格式(SDK)。但是所有项目都使用PackageReference格式进行nuget引用 所以没有packages.config,没有project.json。

VSIX项目依赖于Microsoft.VSSDK.BuildTools nuget包和VSExtensibility系列中的其他包。

对于DSL工具,我必须将所需的资产从DSL SDK(Modeling SDK)复制到我的项目中并明确引用它们。

解决方案正在VS2017中构建完好。

当我通过dotnet CLI(dotnet build)构建它时出现了这样的错误:

D:\..\src\packages\microsoft.vssdk.buildtools\15.5.72\tools\VSSDK\Microsoft.VsSDK.targets(82,5): error MSB4062: The "CompareCommonBuildTaskVersion" task could not be loaded from the assembly D:...\src\packages\microsoft.vssdk.buildtools\15.5.72\tools\VSSDL\Microsoft.VisualStudio.Sdk.BuildTasks.dll. Could not load file or assembly 'System.IO.Packaging, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

可能在dotnet CLI下的MSBuild无法从VSSDK加载Microsoft.VisualStudio.Sdk.BuildTasks.dll

因此无法使用dotnet CLI构建VSIX项目。

然后我尝试通过msbuild.exe构建。它应该在VS中工作,但它没有。

此时我正在:

"D:..\Src\DslDesigner\Dsl\Dsl.csproj" (default target) (2) ->
(ResolveNuGetPackageAssets target) ->
Z:\Prog\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(184,5): error : Your project.json doesn't have a runtimes section. You should add '"runtimes": { "win": { } }' to your project.json and then re-run NuGet restore. [D:...\Src\DslDesigner\Dsl\Dsl.csproj]

根据issue,它在NuGet中是一种过时的消息。但这是关于错误的消息。

VSIX-csproj有: ToolsVersion = “15.0” TargetFrameworkVersion = 4.6.1

所以我不知道如何在命令行中构建我的解决方案。有什么建议吗?

1 个答案:

答案 0 :(得分:5)

有什么帮助解决问题 - 我将以下属性添加到与VSIX相关的所有我的(旧格式)csproj-s中:

<RuntimeIdentifiers>win</RuntimeIdentifiers>