2014-04-24 34 views
1

如果我將一個NuGet包引用添加到DLL項目MyLib(即輸出類型的類庫)中,那麼包管理器有時會在項目中創建一個app.config(例如使用bindingRedirect),並將其構建爲MyLib.dll.config。例如,Microsoft.Owin 2.1.0這樣做。必須將NuGet dll.config更改複製到exe.config?

當我的Windows桌面應用程序加載MyLib.dll時,它會忽略MyLib.dll.config中的bindingRedirect,並且出現FileLoadException。如果手動將bindingRedirect複製到EXE項目的app.config,我可以解決此問題。

這是手動複製粘貼app.config文件之間真正的唯一方法讓NuGet bindingRedirect工作?

鑑於NuGet應該自動處理依賴關係,它似乎非常繁瑣且容易出錯。

回答

0

還有一個更好的辦法。我只需要在添加NuGet包引用之前添加一些本地項目引用。

當我最初將Microsoft.Owin NuGet引用添加到MyLib時,我還沒有向MyApp添加MyLib引用(又名EXE項目)。通過MyApp中的MyLib引用,我卸載了Microsoft.Owin NuGet包,然後將Microsoft.Owin添加回MyLib。巴達冰,巴達潮。 bindingRedirect被自動添加到MyApp的app.config文件中。

所以,當創建一個新的類庫時,在添加NuGet包引用到新庫之前,應該明顯地將新庫引用添加到現有項目中。

1

該軟件包特定的配置文件所做的就是向您顯示特定於該軟件包的配置。你可能會也可能不想把它放到你的實際配置文件中,你可能需要爲你的目的調整它(EntityFramework或log4net就是這樣的例子)。在將軟件包安裝到類庫中的情況下,配置文件完全沒有意義,該配置需要移入適當的可執行文件app.config - 這怎麼可能是自動的。

在nuget之前,您可以從某處下載dll,然後按照如何設置必要配置的說明進行操作。這絕對是一個改進。

所以總而言之,如果你需要它,你確實需要複製它,它確實有道理。

2

這是唯一的方法:類庫項目中的app.config文件基本上只是示例代碼,如果需要,您可以將其複製到主應用程序的配置文件中。

在bindingRedirect的情況下 - 我希望它不僅是必要的,兩種情況:

  1. ,如果你有多個DLL訪問不同版本的MyLib中裝配。在這種情況下,您需要明確決定要使用哪個版本。

  2. 如果您的主應用程序的程序集包含引用舊版本MyLib程序集的配置元素。在這種情況下,你可以做一個:在你的主配置文件

  3. 添加bindingRedirect到主配置文件
    • 更新版本的NuGet包添加到主應用程序項目,在這種情況下,它可能會爲你添加bindingRedirect。
相關問題