Microsoft Installer Project 强行抓取错误的程序集

问题描述

我有一个 C# 解决方案,它使用 Visual Studio Installer Project 将 30 个项目编译成一个很好的捆绑 MSI。最近我添加了一个对 Azure KeyVaults 的 NuGet 引用,它依赖于其他程序集(即 System.ValueTuple)。由于这些是 NuGet 程序集,因此这些 DLL 出现在我的包文件夹下。

当我编译我的解决方案并直接从 Visual Studio 运行时,程序集是从我的包文件夹中加载的,一切都很好。问题是当我生成 MSI 时,打包在 MSI 中的 System.ValueTuple 似乎从我机器上的 Reference Assemblies 文件夹中获取了 DLL,这完全是不同的版本。 >

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades\System.ValueTuple.dll

NuGet 版本是 4.6.26515.6,而我的 Reference Assemblies 文件夹中的版本是 4.8.3761.0

enter image description here

我已通读 Microsoft 文档 Redirect Assembly VersionHow the Runtime Locates Assemblies,但仍然无法强制安装程序项目打包正确的 System.ValueTuple 程序集。

以下是我的配置,它应该允许我告诉 Visual Studio 要重定向哪些程序集。

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Azure.Core" version="1.6.0" targetFramework="net48" />
  <package id="Azure.Identity" version="1.3.0" targetFramework="net48" />
  <package id="Azure.Security.KeyVault.Secrets" version="4.1.1" targetFramework="net48" />
  <package id="Microsoft.Bcl.AsyncInterfaces" version="1.0.0" targetFramework="net48" />
  <package id="Microsoft.Identity.Client" version="4.22.0" targetFramework="net48" />
  <package id="Microsoft.Identity.Client.Extensions.Msal" version="2.16.5" targetFramework="net48" />
  <package id="Microsoft.Office.Interop.Excel" version="15.0.4795.1000" targetFramework="net48" />
  <package id="System.Buffers" version="4.5.1" targetFramework="net48" />
  <package id="System.Diagnostics.DiagnosticSource" version="4.6.0" targetFramework="net48" />
  <package id="System.Memory" version="4.5.4" targetFramework="net48" />
  <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net48" />
  <package id="System.Security.Cryptography.ProtectedData" version="4.5.0" targetFramework="net48" />
  <package id="System.Text.Encodings.Web" version="4.7.2" targetFramework="net48" />
  <package id="System.Text.Json" version="4.6.0" targetFramework="net48" />
  <package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net48" />
  <package id="System.ValueTuple" version="4.5.0" targetFramework="net48" />
</packages>

app.config

<dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>

如果有人遇到过这个问题或知道我如何处理这个DLL-hell,请告诉我我哪里出错了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...