MSBuild使用两个不同的项目构建相同的DLL

时间:2017-02-20 18:40:27

标签: c# msbuild com-interop

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

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

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

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

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

1)我可以构建一个文件名与AssemblyName不同的.NET DLL吗? OR

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

我不想手动编辑csproj XML,因为团队中没有很多人对这些编辑感到满意。因此构建的第二个解决方案。