8

在 Web 项目发布期间,我在部署引用库 (ServiceStack.OrmLite) 时遇到了一个奇怪的问题。直到上周左右它工作正常,现在突然从 Visual Studio 或 msbuild 将项目发布到本地文件系统、FTP 或 Web Deploy 时,一些 ServiceStack DLL 没有被复制。

OrmLite 引用通过 nuget 添加到类库项目中。类库项目引用被添加到主 Web 应用项目中。当我发布 Web App 项目时,它编译并复制了所有文件,除了五个 ServiceStack.OrmLite DLL 中的三个(即不复制 ServiceStack.Common、ServiceStack.Interfaces 和 ServiceStack.Text)。我已经检查(甚至重置)所有 DLL 引用的“复制本地”属性为“真”,但问题仍然存在。我还检查了 OrmLite 没有在 GAC 中注册。

任何提示或建议表示赞赏。

更新1:

我遇到了一堆与同一问题相关的帖子(但不是特别是 ServiceStack)。似乎 Visual Studio 和 msbuild [正确地] 在发布期间忽略了项目中的任何间接引用。

以下是我遇到的一些解决方案:

  1. 也引用主项目中的程序集。

  2. 使用构建脚本将 DLL 复制为构建后事件。

  3. 向类库添加一个虚拟(模拟)方法,并从程序集或命名空间中实例化任何在发布期间未复制的类。我选择了这个选项,它部分解决了这个问题。现在,ServiceStack.Common 和 ServiceStack.Text 被复制,但即使我创建了 ServiceStack.Interfaces 的一部分“ServiceStack.Logging.LogManager”的模拟实例,ServiceStack.Interfaces 仍然没有被复制。所以,基本上我还是卡住了。

4

1 回答 1

0

你可以试试这个答案

基本上,将相应的添加<dependentAssembly>到您的{web|app}.config

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="ServiceStack.Common" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-3.9.70.0" newVersion="3.9.70.0" />
          </dependentAssembly>
       </assemblyBinding>
    </runtime>
</configuration>
于 2015-05-06T00:42:59.790 回答