【发布时间】:2016-03-12 10:35:08
【问题描述】:
我正在使用一个包含非托管客户端 DLL 和托管 COM 服务器 DLL 的应用程序(这本身就是一个挑战:Managed Reg-Free COM Server Won't Activate),现在我想知道保持版本号同步。由于我们正在构建客户端和服务器,并且我们尝试在每次构建时保持所有文件的版本号同步,看起来我需要一个过程来编辑客户端和服务器上的所有清单文件在完整构建发生之前,我所有隔离的 COM 引用结束。有没有更简单的方法?
示例(客户端清单):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="globals" version="1.0.0.0" />
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="SoftBrands.FourthShift.FSCulture" version="8.0.0.999" publicKeyToken="541b4aff0f04b60a" />
</dependentAssembly>
</dependency>
</assembly>
服务器清单:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity type="win32" name="SoftBrands.FourthShift.FSCulture" version="8.0.0.999" publicKeyToken="541b4aff0f04b60a" />
<clrClass clsid="{23D4FF3D-EEDF-4F68-AD65-749958EE3B2A}"
name="SoftBrands.FourthShift.FSCulture.FSCulture"
tlbid="{8D480B22-D603-309F-9A26-EA9E9B020207}">
</clrClass>
</asmv1:assembly>
我可以在 version="8.0.0.999" 上进行全局搜索并替换为每个构建的当前版本,但我怀疑可能有更好的方法。
【问题讨论】:
-
您是否考虑过使用自定义 MSBuild 任务来完成这项工作?
-
没有。我不熟悉自定义 MSBuild 任务。假设它们不会导致其他开发人员的系统崩溃(由于缺少自定义安装),这可能是一个选项。乍一看,似乎需要在每个开发人员的系统上安装另一个程序集。我想我会倾向于在此之前使用全局替换解决方案。
-
您可以将自定义任务的程序集包含在您的项目中,这样每个人都会拥有它与项目路径相关的内容。我们通常会将这些类型的文件检入我们的源代码存储库,并且对所有开发人员都是透明的。