【发布时间】: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 问题,但没有任何帮助。
到目前为止尝试过的事情
- 使用 Nuget 和 dep 卸载了 Caliburn.Micro.ReactiveUI 包和 重新安装。
- 清理解决方案并重建。
- 将构建从 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=""$(SignerPath)\$(Signer)" -a "$(AssemblyPath)" > "$(OutputLogFile)"" 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