在运行时找不到引用的库

时间:2018-03-26 23:24:03

标签: c# dll runtime revit

我有一个带有两个项目的VS解决方案(使用c#),在Revit中作为dll运行的主项目,以及一个主项目引用的类库(称之为子dll ...我是' m试图重构一些代码,将其分解为一个易于重用的库。当我运行主项目时,我得到一个未找到文件的异常,通过将子dll放入我部署主dll的相同位置来修复,以便revit找到它。

然而,这使我的一些建筑师的部署策略变得非常复杂,他们通常不会考虑像dll这样的东西(包括我)。有没有办法静态链接子dll,以便我不得分发更多的文件?

2 个答案:

答案 0 :(得分:0)

我使用一个名为AssemblyResolver的辅助类来解析项目中的程序集。它包含在我在GitHub上提供的开源示例Revit应用程序中 它在App类的构造函数中初始化(实现IExternalApplication) 将任何应搜索程序集的目录传递给AssemblyResolver构造函数。

AssemblyResolver来源:https://github.com/StarkBIM/SampleRevitAddin/blob/master/src/StarkBIM.SampleRevitApp.Helpers/AssemblyResolver.cs

应用来源:https://github.com/StarkBIM/SampleRevitAddin/blob/master/src/StarkBIM.SampleRevitApp.RvtAddin/App.cs

App类的相关部分:

string location = Assembly.GetExecutingAssembly().Location;
_assemblyDir = Path.GetDirectoryName(location).ThrowIfNull();

_assemblyResolver = new AssemblyResolver(_assemblyDir);
AppDomain.CurrentDomain.AssemblyResolve += _assemblyResolver.OnAssemblyResolve;

答案 1 :(得分:0)