2012-12-03 140 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); 
} 

按照一贯的动力学(或反射)你把你写的东西,因为所有的错误会在运行时被陶醉全部责任。