我有一个包含几个项目的解决方案,目标是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
所以我不知道如何在命令行中构建我的解决方案。有什么建议吗?
答案 0 :(得分:5)
有什么帮助解决问题 - 我将以下属性添加到与VSIX相关的所有我的(旧格式)csproj-s中:
<RuntimeIdentifiers>win</RuntimeIdentifiers>