从C#代码调用.net DLL

时间:2012-12-03 07:48:53

标签: .net dll tfs

我想使用tfs从csharp代码中调用一些.net DLL。问题是我无法将这些DLL的引用直接添加到我的解决方案中,因为我需要一个独立的解决方案。这是因为要调用的DLL经常更改,并且还会在其中添加新的DLL。那么我如何使用TFS通过代码调用它们。

4 个答案:

答案 0 :(得分:1)

我不确定TFS会在哪里,但你要找的是System.Reflection。

有一篇文章将为您详细介绍

http://www.codeproject.com/Articles/32828/Using-Reflection-to-load-unreferenced-assemblies-a

答案 1 :(得分:0)

这些其他DLL是否是从VS项目创建的?如果我这样做,我会将项目添加到单个解决方案,然后添加对依赖项目的引用,而不是直接添加到输出DLL。

答案 2 :(得分:0)

不确定为什么你会使用没有引用的dll,但对我来说这听起来有点像你需要使用反射。我在项目中使用的另一种方法是.Net的AddIn选项: 微软官方解释:http://msdn.microsoft.com/en-us/library/bb384200(v=vs.90).aspx Codeproject的一个例子,对我非常有帮助:http://www.codeproject.com/Articles/25866/AddIn-Enabled-Applications

可能有助于了解更多有关您不参考dll的问题。

答案 3 :(得分: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);
}  

与动态(或反思)一样,您对所写的内容负全部责任,因为所有错误都将在运行时发生。