【问题标题】:MSBuild Build same DLL with two different projectsMSBuild 使用两个不同的项目构建相同的 DLL
【发布时间】:2017-02-20 18:40:27
【问题描述】:

我有一个使用外部 COM 组件的系统。有两个基本相同的 COM 对象不同版本(供应商更改了 COM GUID 而没有更改接口。)我使用 tlbimp.exe 为每个 COM 对象创建了两个基本相同的互操作 DLL。我想为每个 COM 对象构建两个具有相同组合名称的 .NET dll。所以我有两个不同的项目,它们引用了所有相同的 C# 源代码(添加为链接)。唯一的区别是对互操作 DLL 的引用不同。计划是最终使用基本相同的不同 DLL(每个 COM 对象一个),然后重命名安装时需要的那个。

我开始为构建的第二个 DLL 使用不同的 bin 目录。但是,构建过程设置为单个 bin 目录(TFS 输出位置=单个文件夹),这会导致第二个 DLL 覆盖第一个。所以我添加了一个后期构建脚本来重命名每个构建的 DLL。

下一个问题是重命名会阻止下游代码编译。 (缺少汇编错误)我可以尝试选择第一个 DLL 构建并使用原始名称保留它,但我可以看到在本地构建时会以混乱结束的场景。哪个 COM 对象正在使用中。基本上,构建错误可能会使系统处于奇怪的状态。

我最初想看看是否可以构建一个文件名与内部程序集名称不同的 DLL,但这似乎是不可能的。

关于解决方案的两个想法:(也许还有另一个?)

1) 我可以用不同于 AssemblyName 的文件名构建 .NET DLL 吗? 或

2) 用一个(或两个)dll 重命名/复制构建并保留其中一个用于依赖代码构建的干净方法是什么?

【问题讨论】:

    标签: c# msbuild com-interop


    【解决方案1】:

    我最终做的是将第二个 DLL 拆分为另一个解决方案,并在 TFS 进程/构建/项目中创建另一个条目

    在第二个项目的预构建步骤中,我需要重命名第一个 DLL,以便使用相同的 dll 名称构建第二个项目。然后在构建后步骤中,我将新的 DLL 重命名为它的特殊名称,并将第一个 DLL 重命名回原来的名称。

    我觉得这是处理问题的最干净的方法。 TFS Build 确保第二个解决方案/项目按顺序构建。

    在单一解决方案概念中,我曾在项目的 Pre/Post 构建事件中尝试重命名,但发现它们并不像您想象的那样连续/有序。有关详细信息,请参阅此帖子:

    MSbuild build order issue - pre-build steps first or dependent projects first

    我不想手动编辑 csproj XML,因为我们团队中没有多少人能够适应这种编辑。因此是构建的第二个解决方案。

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2018-09-07
      • 2014-03-11
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2017-07-27
      相关资源
      最近更新 更多