2011-07-02 207 views
4

.NET如何解析由動態編譯的內存程序集程序引用的程序集。.NET--無法爲已加載的程序集加載文件或程序集

我主持Razor視圖引擎,並用它來即時編譯視圖,但在引用主項目的程序集 時遇到問題。在編譯參數我引用添加到項目組裝,這樣的事情:

// Add references to all currently loaded assemblies 
foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    compileParams.ReferencedAssemblies.Add(a.Location); 
} 

代碼編譯和運行正常,只要我不引用任何類型的項目中的DLL - 在這種情況下,我得到以下 錯誤:

Could not load file or assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

我仔細檢查過,該組合已經被加載在其中異常被拋出點。我錯過了什麼?

+0

您的公共密鑰令牌在哪裏?您是將這些手動添加到您的配置文件還是通過IDE? –

+0

我試過簽名和未簽名的程序集,它沒有區別。 –

回答

1

從代碼看起來好像您正在創建單獨的AppDomain以承載動態編譯的內存中程序集。

這可能是你的動態編譯的程序集引用了你的主應用程序沒有的程序集。查看是否將您的例外轉換爲ReflectionTypeLoadException,並檢查LoaderExceptions未提供線索。

+0

其實,沒有這一切都在一個應用程序域 –

+0

你試過檢查LoaderExceptions嗎? –

2

想通了。主項目是一個exe文件加載到不同目錄中的dll。 .NET程序集加載器默認搜索exe目錄,但不是dll的目錄。使用AppDomain.CurrentDomain.AssemblyResolve事件解決它,該事件搜索項目dll的文件夾。

+0

使用LoadFile?不要,它是邪惡的。 –

相關問題