c# - visual - vs2017 autogeneratebindingredirects




在app.config中為類庫做綁定重定向會做什麼嗎? (3)

我經常使用的VS解決方案包括一個可執行項目 (控制台應用程序,Web應用程序)和許多可執行文件引用的類庫項目

在使用NuGet並安裝軟件包時,通常會為每個項目創建一個app.config文件,通常只包含一個綁定重定向列表,用於合併引用程序集的版本。 有時候會有一些特定於第三方庫的內容(比如Entity Framework配置部分),但是現在讓我們把它放在一邊。

當我構建解決方案並使用主可執行項目的二進製文件時,我看到構建輸出中的所有類庫項目程序集以及相應的*.config文件( app.config文件在構建時被重命名為AssemblyName.config ) 。

啟動主可執行文件時,類庫程序集的配置文件是否有效? 或者只是可執行文件的app.config文件在這種情況下有效? 如果在某些類庫項目上設置了一些綁定重定向,並在主可執行項目上設置了一些不同的綁定重定向,這些如何組合,哪些優先?

我試圖在線研究這個,從我讀過的內容來看,它看起來像非可執行程序集的app.config文件是無用的(關於綁定重定向)。 有人可以確認這一點或詳細說明這個主題嗎?

如果是這樣的話,如果它們只包含綁定重定向,那麼在類庫中創建這些由NuGet創建的app.config文件實際上是不可取的嗎? 我覺得NuGet不應該為類庫項目創建那些綁定重定向,因為它只會增加對實際應用的設置的混淆。

我在這個主題上找到了這些現有的Stack Overflow問題,但是他們接受的答案實際上是矛盾的,即使它們被標記為彼此重複

第一個問題的接受答案提到app.config文件實際上是在編譯時使用的,這意味著它們可能有效。 像MSDNMSBuild源代碼這樣的來源被引用作為它在編譯時使用的證明。 不幸的是,我對MSBuild的熟練程度不足以理解它是如何被使用的,以及它是否真的是一個有效的參數。

任何人都可以描述一個示例場景來證明帶有綁定重定向的類庫的app.config可以做什麼嗎?


不,只有可執行文件的app.config才會生效。 例如,如果您有一個託管WCF服務的控制台應用程序,並且在您的WCF服務中使用了例如ConfigurationManager.AppSettings ,則AppSettings將來自控制台主機app.config文件。 如果您啟動另一個控制台應用程序(ConsoleClient)以嘗試連接到ConsoleHost,那麼在ConsoleClient可以說是“正在執行”的部分(例如在其主方法中),它將使用ConsoleClient的app.config ,但是一旦開始使用WCF服務,WCF服務將委託使用ConsoleHost的app.config 。 (請注意,最後一點與WCF背後的細節更相關。)

令人驚訝的是,msdn提供了這個很好的資源: https://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?forum=wcfhttps://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?referrer=http://social.msdn.microsoft.com/Forums/vstudio/en-US/e13194df-6308-4cbe-973c-f6a462f43eae/how-can-wcf-library-dll-access-application-settings?forum=wcf


我有多個具有類似設置的應用程序 - Web應用程序引用多個庫項目,每個項目都有自己的nuget包等。根據我的個人經驗,在運行時不考慮庫項目中的程序集綁定。

在根應用程序(Web /控制台)中指定web或app config的綁定是唯一重要的。 我的所有庫項目都設置為“複製到輸出目錄”設置為“不要復制”app.config文件 - 這樣我的輸出文件夾不會與dll及其配置文件混亂。

這是一個鏈接 ,說明如何加載程序集以及搜索的位置和順序。 沒有在文章中他們談論個別項目配置文件。

希望有所幫助。


通常只有一個配置文件,即可執行文件(.exe.config,web.config)的配置文件。

任何程序集重定向都必須放在可執行文件的配置文件中。

需要使用ConfigurationManager類手動加載dll的配置文件。 另請參閱此問題等效於庫的“app.config”(DLL)







assembly-binding-redirect