我想使用tfs从csharp代码中调用一些.net DLL。问题是我无法将这些DLL的引用直接添加到我的解决方案中,因为我需要一个独立的解决方案。这是因为要调用的DLL经常更改,并且还会在其中添加新的DLL。那么我如何使用TFS通过代码调用它们。
答案 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);
}
与动态(或反思)一样,您对所写的内容负全部责任,因为所有错误都将在运行时发生。