如何解决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
。
我已通读 Microsoft 文档 Redirect Assembly Version 和 How 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 举报,一经查实,本站将立刻删除。