在发布时突然没有复制引用的程序集(DLL)

时间:2013-10-09 00:12:12

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

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

OrmLite引用通过nuget添加到类lib项目中。类lib项目引用被添加到主Web App项目中。当我发布Web App项目时,它编译并复制除五个ServiceStack.OrmLite DLL中的三个(即ServiceStack.Common,ServiceStack.Interfaces和ServiceStack.Text未复制)之外的所有文件。我已经检查(甚至重置)所有DLL引用的'Copy Local'属性为'true',但问题仍然存在。我还检查过OrmLite未在GAC注册。

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

更新1:

我遇到了一堆与同一问题相关的帖子(但特别是ServiceStack没有)。看起来像Visual Studio和msbuild [正当]在发布期间忽略项目中的任何间接引用。

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

  1. 也可以参考主项目中的程序集。

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

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

2 个答案:

答案 0 :(得分:1)

这是设计的。您必须手动将二次引用的程序集添加到项目中,并将输出设置为“始终复制”,如本文所示http://msdn.microsoft.com/en-us/library/vstudio/cc837214%28v=vs.100%29.aspx

答案 1 :(得分:0)

您可以尝试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>