我們正在開發一個引用一些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),但是在構建服務器上沒有安裝,因此在編譯前沒有做一些額外的步驟就會失敗。 –