簡體   English   中英

在 Visual Studio 中編譯時如何將 DLL 保存在不同的文件夾中?

[英]How to save DLLs in a different folder when compiling in Visual Studio?

假設我有一個Window Forms / Console Application C#項目,其中包含一些外部引用以及對同一解決方案中其他類庫項目的引用。

當我構建Window Form項目時,我希望引用的庫存儲在不同的位置(例如: bin\\Release\\Libraries ),而不是與 .exe 位於同一文件夾中

有可能嗎?

你的問題有兩部分:

如何配置解決方案以將程序集/EXE 構建到您選擇的文件夾中 - 這是通過 VS 中的項目屬性配置的(項目屬性 -> 構建 -> 輸出路徑)。 還檢查每個引用的“復制本地”屬性的值。

如何從非默認位置(即從 ...\\Libraries 文件夾)加載程序集文件 - 您需要更改 app.config 文件以將此非默認路徑添加到程序集搜索位置..

指向 Microsoft 站點的鏈接不再有效,因此來自回溯機器的摘要: 如何在運行時加載位於不是應用程序 bin 文件夾的文件夾中的程序集

方法 1:在全局程序集緩存 (GAC) 中安裝程序集。 GAC 是計算機范圍的代碼緩存,公共語言運行時安裝在其中。 GAC 存儲您專門指定由多個應用程序共享的程序集。

注意您只能在 GAC 中安裝強名稱程序集。

方法 2:使用帶有標記的應用程序配置 (.config) 文件 .config 文件包含以下設置:

• 特定於應用程序的設置

• 公共語言運行時讀取的設置,例如程序集綁定策略設置和遠程處理對象設置

• 應用程序讀取的設置

<codeBase>標記指定公共語言運行時可以在何處找到程序集。 公共語言運行時應用 .config 文件中<codeBase>標記的設置。 <codeBase>標簽的設置決定了程序集的版本和位置。

方法 3:使用 AssemblyResolve 事件只要公共語言運行時嘗試綁定到程序集並失敗,就會觸發 AssemblyResolve 事件。 您可以使用 AddHandler 方法向應用程序添加一個事件處理程序,該程序在 AssemblyResolve 事件觸發時返回正確的程序集。

AssemblyResolve 事件處理程序必須返回一個 [Assembly] 對象,並且公共語言運行時必須綁定到這個對象。 通常,您可以使用 Assembly.LoadFrom 方法加載程序集,然后返回對象。

前面已經給出了正確的答案。 我只想提一下,有一個名為PrettyBin的 nuget 包。

將其安裝在您的啟動項目中。 DLL 和 XML 將轉到 lib 文件夾,如果您不進行自定義,您將獲得有關如何完成的工作示例。

在項目peoperties中設置參考路徑。

您還可以通過在項目 peoperties 中指定輸出路徑來指定編譯的 exe 的位置。

您可以在此處找到組織項目參考的最佳實踐: http : //codebetter.com/patricksmacchia/2009/01/11/lessons-learned-from-the-nunit-code-base/

查看章節“VisualStudio 項目參考 + 復制本地 true 選項是邪惡的!”

是的,這是可能的,您可以在 msbuild 腳本中進行。 雖然我不能給你一個確切的答案,但請看這里關於 SO Copy all files and folders using msbuild 的這個問題

暫無
暫無

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

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