【问题标题】:The type 'ReactiveUI.ReactiveObject' is defined in an assembly that is not referenced“ReactiveUI.ReactiveObject”类型是在未引用的程序集中定义的
【发布时间】:2015-03-29 04:30:04
【问题描述】:

错误 8 类型“ReactiveUI.ReactiveObject”在程序集中定义 没有被引用。您必须添加对程序集的引用 'ReactiveUI,版本=6.0.3.0,文化=中性, PublicKeyToken=null'。 D:\git\ProjectName\ViewModels\AboutViewModel.cs 15 25 JIMS

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

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

到目前为止尝试过的事情

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

更新

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

卸载了所有软件包
PM> Uninstall-Package Caliburn.Micro.ReactiveUI -RemoveDependencies

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

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

并且该程序集尚未签名并且具有StrongName=False 现在,当我构建项目时,它将签署 unsinged dll 作为 MSBuild 脚本的一部分

<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 的引用

【问题讨论】:

  • 是否可以检查此项目或重现此问题的类似项目?
  • 问题是因为 Caliburn.Micro.ReactiveUI 内部引用了未签名的 ReactiveUI.dll,当我对其进行签名时,它变成了 Caliburn.Micro.ReactiveUI 的不同程序集,以使其工作,我必须重建 Caliburn.Micro.ReactiveUI 将签名的 dll
  • 哦,好的。随意这样做,因为我不打算提供签名版本(Paul 也不会很快做 ReactiveUI 之一)。
  • 感谢您迄今为止的所有帮助。

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


【解决方案1】:

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

【讨论】:

  • Caliburn.Micro 的包已经存在,因为它在 Caliburn.MIcro 之上运行
  • 您是否也手动添加了 ReactiveUI? Caliburn.Micro.ReactiveUI 仅引用 reactiveui-core。您可以发布您的 packages.config 文件的内容吗?
猜你喜欢
  • 2016-09-04
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
相关资源
最近更新 更多