我们正在开发一个引用一些COM库(例如AutoIT)的C#应用程序。在构建服务器上注册COM引用的DLL
我在第三方“Libs”文件夹中包含源代码管理下的所有引用的组件。
问题是,COM DLL在.csproj文件中没有HintPath属性,我假设这些必须使用regsvr32(或使用某种脚本)手动注册。
我目前正在研究创建一个MSBuild脚本,该脚本将在每次构建之前运行,但是我无法弄清楚应该手动调用regsvr32.exe还是使用一些预定义的MSBuild任务?
目前,这是我所attmpted作为测试:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<ItemGroup>
<MyAssemblies Include="D:\*.dll" />
</ItemGroup>
<Target Name="Build">
<RegisterAssembly
Assemblies="@(MyAssemblies)" >
</RegisterAssembly>
</Target>
</Project>
这会产生错误,我已经放置在指定文件夹中的DLL文件是无效的DLL。
什么是解决这个问题的好方法?
编辑:引用内COM DLL必须在.csproj的文件与此类似
项目:
<COMReference Include="AutoItX3Lib">
<Guid>{F8937E53-D444-4E71-9275-35B64210CC3B}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
这不包括任何暗示路径等管理组件,因此生成服务器上,没有找到引用的COM DLL。
使用REGSVR32注册构建服务器上的COM DLL时,构建成功。
我有两个类型库和互操作程序集签入我的源代码管理(Git)。尽管参考interop是不够的。 Tlbimp的输出是什么?我宁愿将它作为构建过程的一部分,而不是先行,因为在升级构建环境时,我可以复制所有脚本并扩展到更多的服务器,并将所有逻辑存储在那里,而无需任何先决步骤 –
Tlbimp的输出是互操作程序集。我不能用“不够”来做任何事情,你必须描述你变得更好的构建错误。 –
我已更新我的原始问题。 Interop dll存在于“依赖关系”文件夹中,但是.csproj和此文件之间没有链接,因此构建不会选择该文件。在我的开发环境中,这可以正常工作,因为我已经安装了原始软件包(例如AutoIt),但是在构建服务器上没有安装,因此在编译前没有做一些额外的步骤就会失败。 –