gpt4 book ai didi

c# - 针对两个不同的程序集引用编译相同的代码?

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:37 28 4
gpt4 key购买 nike

我有一些代码依赖于对作为 COM 应用程序的供应商产品的一部分的引用,使用 .NET 自动 COM 包装(我刚刚使用 Visual Studio 的“添加引用”对话框添加了一个引用,并从中选择已注册的 COM 组件列表)。我的代码面向 .NET Framework 4.0。

供应商产品的最新版本已弃用 COM GUI 应用程序,但现在附带了一个 COM 互操作 DLL,它实现了与原始 COM 应用程序相同的 API。但是,新的 COM 互操作 DLL 是使用 .NET Framework 4.5 编译的。

由于 API 相同,我不想维护两个独立的代码库以与供应商产品的旧版本和新版本兼容。

我如何设置我的 Visual Studio 项目,以便我可以拥有一个代码库,该代码库可与原始 VendorApplication COM 组件(如果可行,最好在 .NET 4.0 上)和新的 VendorApplication.Interop.dll(在 . NET 4.5)?

最佳答案

How can I set up my Visual Studio project so that I can have one code base which works with both the original VendorApplication COM component (preferably on .NET 4.0 if that's feasible) and the new VendorApplication.Interop.dll (on .NET 4.5)?

这样做的一种方法是创建同一个“thunk”库的两个版本,公开相同的 API。每个版本都应该有自己的 strong name .

  • 第一个版本(例如,MyInterfaceAssembly.dll 版本为 v4.0.0.1)应该以 .NET 4.0 为目标并使用旧的供应商库。

  • 第二个版本 (MyInterfaceAssembly.dll v4.5.0.1) 应该以 .NET 4.5 为目标并使用新的供应商库。

  • 您的应用程序是为引用第一个版本 (v4.0.x) 并与其链接而构建的。

  • 安装程序将安装 v4.0.x 或 v4.5.x,具体取决于最终用户系统。

  • 最重要的部分是app.config文件,你会在哪里使用 <bindingRedirect> :

<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyCompany.MyInterfaceAssembly" publicKeyToken="xxxxxxxxxxxxxxxx" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.5.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

在 .NET 4.5 上,您的应用程序将使用 MyInterfaceAssembly.dll 运行v4.5.x,前提是 v4.0.x 已安装。

关于c# - 针对两个不同的程序集引用编译相同的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com