2016-05-03 117 views
0

我正在開發一個C#應用程序與.NET Framework 4.0,Entity Framework 6.1.3和Sqlite 1.0.96.0。無法從GAC加載程序集,但它從程序文件夾加載

我有一個程序集,它使用SQLite,MyCompany.Data.Sqlite.Common,安裝在GAC上(System.Data.SQLite也安裝在GAC上)。

我有兩個錯誤:

「實體框架使用的默認實例DbConfiguration檢測前 型」 SQLiteConfiguration」。在使用任何功能之前,應在 應用程序的開頭設置一個 「SQLiteConfiguration」實例,或者在應用程序的配置文件中註冊實體框架必須爲 。有關更多信息,請參閱 http://go.microsoft.com/fwlink/?LinkId=260883。 「

爲了解決這個問題,我已經加入App.config如下:

<entityFramework codeConfigurationType="MyCompany.Data.Sqlite.Common.SQLiteConfiguration, MyCompany.Data.Sqlite.Common"> 

但是,加入這App.config程序不從GAC加載它之後。

我必須將相同的DLL複製到EXEC文件夾加載它並運行該程序。

我認爲這不是版本號問題,或者dll格式不正確,因爲我在GAC中使用了相同的dll。

我也加入了這App.config

<dependentAssembly> 
     <assemblyIdentity name="MyCompany.Data.Sqlite.Common" publicKeyToken="db937bc2d44ff139" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" /> 
     </dependentAssembly> 

但我必須複製到DLL應用程序的文件夾中。

有什麼想法?

+0

在GAC的天然等同物,組件版本和具有所謂的「強」名稱中包含的散列 - 而當私人(在相同的文件夾中的,作爲應用)集被加載剛集名稱用來。也許類似的主體在這裏適用,並且您沒有指定程序集的正確版本,因此無法從GAC加載?只是一個猜測。 –

回答

2

從GAC裝載裝配件需要全限定裝配名稱。例如;

<entityFramework codeConfigurationType="MyCompany.Data.Sqlite.Common.SQLiteConfiguration, MyCompany.Data.Sqlite.Common, Version=1.1.1.1, Culture=neutral, PublicKeyToken=ABCD1234567890"> 
+0

謝謝。有用!你從哪裏找到這些信息?我一直在尋找很多,我只找到了這種方式:''和GAC沒有任何關係。 – VansFannel

+1

GAC可以存儲多個版本的程序集,因此要加載一個版本,您需要通過添加版本,密鑰等明確指出哪一個版本。從軟件構建和發佈管理的經驗中學習:) – ChrisBint