类型' ReactiveUI.ReactiveObject'在未引用的程序集中定义

时间:2015-03-27 22:57:15

标签: c# .net reactiveui caliburn.micro.reactiveui

  

错误8类型“ReactiveUI.ReactiveObject”在程序集中定义   没有引用。您必须添加对程序集的引用   'ReactiveUI,Version = 6.0.3.0,Culture = neutral,   公钥=空”。 D:\ git \ ProjectName \ ViewModels \ AboutViewModel.cs 15 25 JIMS

过去几个小时我很难解决这个问题。我已将Caliburn.Micro替换为Caliburn.Micro.ReactiveUI。我使用nuget引用了这个dll,最初有一个签名问题,但是通过修改我的MSBuild脚本来签署这个程序集来解决这个问题。

现在我收到此错误,即使我已将引用添加到此程序集中。我已经看过其他问题,但没有任何帮助。

到目前为止尝试过的事情

  
      
  1. 使用Nuget和dep卸载了Caliburn.Micro.ReactiveUI包   重新安装。
  2.   
  3. 清理解决方案并重建。
  4.   
  5. 将构建从Debug更改为Release,没有任何效果。
  6.   

更新

进一步深入研究这个问题,这是我注意到的。 我使用

取消了所有软件包的安装
PM> Uninstall-Package Caliburn.Micro.ReactiveUI -RemoveDependencies

然后我重新安装,现在我使用dotPeek检查了ReactiveUI.dll,这就是它的内容

ReactiveUI, Version=6.0.3.0, Culture=neutral, PublicKeyToken=null

并且程序集尚未签名并且StrongName=False 现在,当我构建项目时,它将作为MSBuild脚本

的一部分签署unsinged dll
<Target Name="SignAssembly" Outputs="%(Reference.HintPath)" BeforeTargets="BeforeBuild">
  <ConvertToAbsolutePath Paths="%(Reference.HintPath)">
    <Output TaskParameter="AbsolutePaths" PropertyName="AssemblyPath" />
  </ConvertToAbsolutePath>
  <Message Text="Assembly Path: $(AssemblyPath)" />    
  <Exec Command="&quot;$(SignerPath)\$(Signer)&quot; -a &quot;$(AssemblyPath)&quot; &gt; &quot;$(OutputLogFile)&quot;" IgnoreExitCode="true" />
  <ReadLinesFromFile File="$(OutputLogFile)">
    <Output TaskParameter="Lines" ItemName="OutputLogFile" />
  </ReadLinesFromFile>
  <Message Text="@(OutputLogFile->'%(Identity)', '%0a%0d')" />
  <Delete Files="$(OutputLogFile)" />
</Target>

请注意,创建日志文件和删除仅用于调试。 现在我再次检查了dotPeek中的汇编信息,这是签署dll后显示的内容

ReactiveUI, Version=6.0.3.0, Culture=neutral, PublicKeyToken=831a72fa0d8caa87

现在我对错误发生了一些了解,所以一旦签署了程序集,它就是MSBuild的另一个程序集。

那么如何在Visual Studio中更新对新签名dll的引用

1 个答案:

答案 0 :(得分:0)

您是否为ReactiveUI和Caliburn.Micro添加了软件包?从您所说的内容来看,您只添加了Caliburn.Micro.ReactiveUI,它只引用了两个框架的核心库。