【发布时间】:2018-08-21 21:04:36
【问题描述】:
我在 WPF 项目中使用 Microsoft.Build 框架在运行时构建项目。在我的 app.config 中,我指定了以下程序集绑定:
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Utilities.Core" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Framework" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Tasks.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Engine" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="15.1.0.0" />
</dependentAssembly>
以下参考在我的项目文件(.csproj)中:
<Reference Include="Microsoft.Build, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Build.15.5.179\lib\net46\Microsoft.Build.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Build.Framework.15.5.179\lib\net46\Microsoft.Build.Framework.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Build.Tasks.Core.15.5.179\lib\net46\Microsoft.Build.Tasks.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Build.Utilities.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Build.Utilities.Core.15.5.179\lib\net46\Microsoft.Build.Utilities.Core.dll</HintPath>
<Private>True</Private>
</Reference>
Microsoft.Build 包的 NuGet 版本是 15.5.179。这在运行和调试项目时工作正常。我安装的包是:
- Microsoft.Build
- Microsoft.Build.Framework
- Microsoft.Build.Runtime
- Microsoft.Build.Tasks.Core
- Microsoft.Build.Utilities.Core
但是,我在我的解决方案中添加了一个安装向导 (.vdproj),虽然检测到的 Microsoft.Build.* 依赖项显示为版本 15.1.0.0,但当我构建可执行文件时,安装并运行我的应用程序以下错误:
Could not load file or assembly 'Microsoft.Build, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
我错过了什么..?
更新:
有趣的是,已安装应用程序目录中的 MSBuild dll 的版本为 15.5.179 - NuGet 版本。
我的项目中的“引用”选项卡包含 4 个对 15.1.0.0 版本的引用:
- Microsoft.Build
- Microsoft.Build.Framework
- Microsoft.Build.Tasks.Core
- Microsoft.Build.Utilities.Core
【问题讨论】:
-
你错过了
Microsoft.Build。你只得到了Microsoft.Build.Framework,这是一个不同的 NuGet 包 -
我添加了我可能丢失的任何绑定(见上文),尽管我得到了完全相同的结果。
-
验证所有项目对 MSBuild 的引用(在 csproj 文件中)是否符合您的预期。听起来一个(或多个)可能正在引用 15.1。另外,您是否为 exe 构建了不同的配置?也许有一个在调试构建期间未构建的项目正在另一个配置中构建(例如 Release 或其他配置),而这就是 15.1 依赖项的来源?
-
更新了我的帖子以包含 csproj 参考。我的解决方案仅包含 2 个项目。实际项目和设置向导。我对配置不感兴趣。
-
你的包源是 15.5 版本,但是在你的 csproj 文件中版本指定为 15.1。这是故意的吗? 15.5 包不包含 15.1 版
标签: c# wpf msbuild dependencies assemblies