0

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

4

4 回答 4

1

我不确定 TFS 会出现在哪里,但您正在寻找的是 System.Reflection。有一篇文章会在

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

于 2012-12-03T15:54:05.190 回答
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());
}

然后您可以使用“Dynamics”最轻松地访问它:

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

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

于 2012-12-04T11:09:12.533 回答
0

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

于 2012-12-03T07:51:23.127 回答
0

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

了解更多关于为什么不引用 dll 的问题可能会有所帮助。

于 2012-12-03T09:05:23.243 回答