簡體   English   中英

C#如何在構建中包括DLL依賴項?

[英]C# How to include DLL dependencies in build?

我有一個可視的c ++項目(該項目構建到名為X的DLL),該項目引用了另一個DLL(稱為Y)。

在X的可視C ++項目中,我通過項目設置,鏈接器,輸入和其他依賴項設置了對Y的引用。

現在,我有另一個項目,一個C#項目,Z,它引用X。我通過將X添加為項目依賴項來在Z中包含X。

由於某種原因,需要先編譯X,然后才能編譯Z(該項目不會同時構建所有內容)。

但是,當我運行Z並點擊Z的引用時,出現一個異常“無法加載文件或程序集'X'或其依賴項之一”。

當我查看Z的build文件夾時,在那里看到X.dll,但沒有看到Y.dll。

我該如何解決?

恐怕您需要手動編輯項目文件才能實現此行為。 (不幸的是,Visual C ++項目內部沒有菜單可以執行此操作。)

我建議您在開始編輯項目文件之前進行備份。

在Visual Studio中,您需要卸載X的項目文件(右鍵單擊並在解決方案資源管理器中選擇“卸載項目”)。

然后再次右鍵單擊並選擇“編輯X.vcxproj”。

Project元素內部,您將需要添加一個ItemGroup,如下所示:

<ItemGroup Condition="'$(Configuration)'=='Release'">
  <Content Include="E:\full_path\Y.dll">
    <Link>Y.dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
  <Content Include="E:\full_path\Yd.dll">
    <Link>Yd.dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

如果沒有其他調試dll文件(或64位和32位版本),則只能使用一個Itemgroup並刪除co​​ndition屬性。 然后它將Y.dll復制到所有項目輸出。

然后保存您的編輯並重新加載項目(也單擊鼠標右鍵)。

這解決了問題,因為現在項目“ Z”將知道在構建項目“ X”時,需要將Y.dll復制到項目“ X”或引用“ X”的父項目的輸出中。

(最好使用變量而不是硬編碼路徑,但我想使示例保持簡單。)

我在許多引用第三方或開放源代碼庫的托管C ++項目中使用了此功能。 我花了一些時間才弄清楚這一點。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM