2013-01-06 41 views
1

我一直在使用Visual Studio Addin項目一段時間。這個插件的目的是告訴我哪些存儲過程在我的許多項目中使用。反思ASP.Net網站

我通過將所有項目(包括Business和DataAccess項目)加載到一個解決方案中,然後使用EnvDTE遍歷解決方案的項目以獲取特定的代碼項來實現此目的。

這樣我可以識別調用各種存儲過程的方法,它的工作原理非常棒。

然後確定哪些方法調用我的數據訪問項目的各種方法,我使用反射來加載大會對每個項目:

foreach (EnvDTE.Project proj in this._solution.Projects) { 
    assembly = System.Reflection.Assembly.LoadFrom(GetAssemblyPath(proj)); 
} 

private string GetAssemblyPath(EnvDTE.Project vsProject) 
{ 
    string assemblyPath = ""; 
    string fullPath = vsProject.Properties.Item("FullPath").Value.ToString(); 
    string outputPath = vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value.ToString(); 
    string outputDir = System.IO.Path.Combine(fullPath, outputPath); 
    string outputFileName = vsProject.Properties.Item("OutputFileName").Value.ToString(); 
    assemblyPath = System.IO.Path.Combine(outputDir, outputFileName); 

    return assemblyPath; 
} 

該系統的工作原理只是偉大的大部分項目,但現在我有遇到了一個問題,我無法繞過它......

是否有可能使用這種反射組裝加載WebSite項目。它失敗的:

vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath") 

由於網站沒有輸出路徑的方式爲DLL OG的WinForms項目同樣具有...

我需要使用反射,因爲它是不可能確定將呼叫重載使用EvnDTE的方法。通過反射,我可以得到一個方法體的指令,從而識別哪個重載方法被調用。

EnvDTE在WebSite項目中工作正常,但反射不妥。 :(

通過使用EnvDTE我只能得到一個方法的文本內容。

有誰知道怎樣做才能得到這個工作?

+0

難道你只是加載所有的.DLL和.EXE文件在輸出目錄? –

+0

這將是可取的。但是,因爲它是一個WebSite項目沒有輸出路徑。而一個WebSite項目不是直接構建爲一個DLL或EXE。唯一的組件放在該網站的AppCode文件夾是被引用的dll的 – Beaker

+0

它失敗了,因爲你試圖使用變量outputpath,即使它沒有價值,或者當你嘗試和分配值時它會拋出異常嗎? –

回答

0

有人失敗,因爲一個網站項目不創建一個輸出組件,DLL,它是可訪問的,幷包含所有信息,這是由Web服務器的動態,而不是創造。

我無法避開它,我的解決辦法是簡單地我的網站項目轉換爲WebApplication的項目。

這些是實際的正常項目,並且有一個我可以訪問的預編譯的Assembly DLL。

感謝您的意見...