2012-07-22 110 views
2

我正在創建一個新的.exeWPF forms。問題是,我需要引用一些程序集。CodeDom ReferencedAssembly絕對路徑

這是我如何將它們添加:

var p = new CompilerParameters 
{ 
    GenerateExecutable = true, 
    TreatWarningsAsErrors = false, 
    CompilerOptions = "/t:winexe", 
    IncludeDebugInformation = false, 
    OutputAssembly = dlg.FileName, 
}; 


string[] assemblies = { 
    "System", "System.Core", "System.Data", "mscorlib", 
    "System.Drawing", "System.Windows.Forms", "Microsoft.CSharp", 
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase", 
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore", 
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFrameWork" 
}; 

foreach (string a in assemblies) 
{ 
    p.ReferencedAssemblies.Add(a + ".dll"); 
} 

這是工作正常,但你會發現,我必須進入的絕對路徑Windowsbase.dllPresentationCore.dllPresentationFrameWork.dll,否則,因爲他們會拋出錯誤未找到。 這可能不適用於所有電腦。

我該怎麼辦? (我想我可以在項目文件夾中包含3 .dll的這些文件,並將它們與應用程序一起發送並引用相對路徑(如果它工作,我現在不能測試它),但是有沒有其他方法?)

+0

您確定這些程序集是在GAC中註冊的嗎?這可能是爲什麼他們沒有找到其他的原因。 – 2012-07-22 22:22:51

+0

您對GAC有何意義?在VS或.NET Framework中沒有改變任何東西。 – Mek 2012-07-22 22:25:41

回答

0

您應該確保有問題的程序集已在GAC (Global Assembly Cache)中註冊,因爲這是您的應用程序最終在未提供絕對路徑時查找它們的位置。

您可以通過瀏覽到C:\Windows\Assembly(假設C:\Windows是您的Windows安裝目錄)來檢查哪些程序集已註冊到GAC。

+0

看起來就像這些.dll在GAC中不是默認設置,我將與一些人共享該項目,所以我不希望他們必須改變很多(例如GAC)。 – Mek 2012-07-22 22:29:17

+0

@Mek對於安裝了最新.NET Framework的任何計算機,這些程序集應位於GAC中。他們不在您的計算機上的事實可能意味着您沒有安裝它或者安裝已損壞。 – 2012-07-22 22:33:33

+0

我使用最新的更新+ .NET Framework在2臺PC上和虛擬機上進行了測試,結果無效。 – Mek 2012-07-22 22:40:17

1

一種欺騙方式是,如果你引用的DLL在你的項目,你可以做到以下幾點:

typeof(System.Windows.Point).Assembly.Location 

,將讓你過去WindowsBase問題。