2012-12-03 102 views
0

我想使用tfs從csharp代碼調用一些.net DLL。問題是我無法將這些DLL的引用直接添加到我的解決方案中,因爲我需要一個獨立的解決方案。這是因爲被調用的DLL經常變化,並且新的DLL也被添加進來。那麼我如何使用TFS通過代碼來調用它們。從C#代碼調用.net DLL的

+0

爲什麼你不能使用引用?我們在我們的TFS中有一個Assemblies文件夾,我們從該文件夾中添加對DLL的引用。在每次檢查該DLL的解決方案時,我們都注意我們將新的DLL檢入到Assemblies文件夾中。 – Bikonja

回答

0

是否從VS項目創建這些其他DLL?如果我這樣做,我會將項目添加到單個解決方案中,然後將引用添加到依賴項目中,而不是直接添加到輸出DLL。

+0

是的,他們只在VS中創建。但我需要在不添加任何參考的情況下調用它們 – user1706187

+0

我正在使用批處理文件來實現此目的,但批處理文件執行不受控制,因此尋找更好的方法 – user1706187

0

不知道爲什麼你會使用沒有引用的dll,但對我來說,它聽起來有點像你需要使用反射。我在項目中使用的另一種方法是淨的外接程序選項: 微軟官方解釋:http://msdn.microsoft.com/en-us/library/bb384200(v=vs.90).aspx 從CodeProject,這是非常有益的,我舉個例子:http://www.codeproject.com/Articles/25866/AddIn-Enabled-Applications

可能有助於瞭解更多有關該問題的原因你不會參考dll。

0

攤開來給你。如果我理解正確的文章,這或多或少是你所需要的:

private void LoadUpdatedAssembly() 
{ 
    var versionControlServer = _tfs.GetService<VersionControlServer>(); 
    var tempFilePath = Path.GetTempFileName(); 
    if (File.Exists(tempFilePath)) 
    { 
     File.SetAttributes(tempFilePath, FileAttributes.Normal); 
     File.Delete(tempFilePath); 
    } 
    versionControlServer.DownloadFile(@"$/<TeamProject>/<SourceControlFilePath>.dll", tempFilePath); 
    var assembly = Assembly.LoadFrom(tempFilePath); 
    AppDomain.CurrentDomain.Load(assembly.GetName()); 
} 

然後你就可以訪問它最容易與「動態」:

static void UseDynamicallyLoadedAssembly() 
{ 
    dynamic dynamicExampleClass = new ClassInAssembly(); 
    dynamicExampleClass.MethodOfTheClassInTheAssembly (10, 4); 
} 

按照一貫的動力學(或反射)你把你寫的東西,因爲所有的錯誤會在運行時被陶醉全部責任。