【问题标题】:Referenced assemblies (DLLs) suddenly not being copied on publish引用的程序集 (DLL) 在发布时突然没有被复制
【发布时间】:2015-05-06 08:52:36
【问题描述】:

在 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 仍然没有被复制。所以,基本上我还是卡住了。

【问题讨论】:

  • 您确定这些程序集不在任何 GAC 中吗? stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why
  • 你找到解决这个问题的新方法了吗?我的问题是还要找出缺少的 DLL,因为在本地机器上一切正常,但在集成服务器中却不行……即使我们必须手动添加引用,我们怎么知道要添加哪个 DLL?

标签: .net visual-studio servicestack ormlite-servicestack


【解决方案1】:

你可以试试this answer

基本上,将相应的<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多