我一直在使用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我只能得到一個方法的文本內容。
有誰知道怎樣做才能得到這個工作?
難道你只是加載所有的.DLL和.EXE文件在輸出目錄? –
這將是可取的。但是,因爲它是一個WebSite項目沒有輸出路徑。而一個WebSite項目不是直接構建爲一個DLL或EXE。唯一的組件放在該網站的AppCode文件夾是被引用的dll的 – Beaker
它失敗了,因爲你試圖使用變量outputpath,即使它沒有價值,或者當你嘗試和分配值時它會拋出異常嗎? –