我想使用 tfs 从 csharp 代码中调用一些 .net DLL。问题是我无法将这些 DLL 的引用直接添加到我的解决方案中,因为我需要一个独立的解决方案。这是因为要调用的 DLL 经常变化,并且新的 DLL 也被添加到其中。那么我如何使用 TFS 通过代码调用它们。
4 回答
我不确定 TFS 会出现在哪里,但您正在寻找的是 System.Reflection。有一篇文章会在
http://www.codeproject.com/Articles/32828/Using-Reflection-to-load-unreferenced-assemblies-a
如果我理解正确,这或多或少是您需要的:
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);
}
与动态(或反射)一样,您对所写的内容负全部责任,因为所有错误都会在运行时出现。
这些其他 DLL 是从 VS 项目创建的吗?如果我这样做,我会将项目添加到单个解决方案中,然后添加对依赖项目的引用,而不是直接添加到输出 DLL。
不知道为什么你会使用未引用的 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 的问题可能会有所帮助。