【问题标题】:Referenced Library not found at runtime运行时未找到引用的库
【发布时间】:2018-03-27 15:45:47
【问题描述】:

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

但是,对于一群通常不考虑 dll 之类的东西(包括我)的架构师来说,这大大复杂化了我的部署策略。有没有办法静态链接子 dll,这样我就不必分发更多文件了?

【问题讨论】:

  • 将 DLL 放在其他地方应该是更难的问题,“将它们放在同一目录中”没有什么复杂的。考虑一下 ILMerge 实用程序。
  • 我想我倾向于同意你的观点,除了我没有一个好的部署实用程序(使用社区版本),所以它只是更多的跟踪。我会研究你提到的 ILMerge 实用程序。

标签: c# dll runtime revit


【解决方案1】:

我使用一个名为 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;

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 1970-01-01
      • 2015-12-21
      相关资源
      最近更新 更多