在 Visual Studio 2012 中一个空白的新类库中,我试图添加对解决方案中现有项目的引用,也是一个类库 MonoGame.Framework.Windows8 (https://github.com/mono/MonoGame),但得到错误:
无法添加对 Project MonoGame.Framework.Windows8 的引用
我已经成功地构建了现有的库 MonoGame 并使其成为新库的依赖项。可能是什么问题呢?
(非常烦人的错误信息没有给出原因!)
在 Visual Studio 2012 中一个空白的新类库中,我试图添加对解决方案中现有项目的引用,也是一个类库 MonoGame.Framework.Windows8 (https://github.com/mono/MonoGame),但得到错误:
无法添加对 Project MonoGame.Framework.Windows8 的引用
我已经成功地构建了现有的库 MonoGame 并使其成为新库的依赖项。可能是什么问题呢?
(非常烦人的错误信息没有给出原因!)
尝试添加构建的 dll 有一个参考给出了一个更明确的错误消息,它为我解决了这个问题,它说:
“无法添加对‘x’的引用。项目以“.NetFramework”为目标,而文件引用以“.NetCore”为目标。这不是受支持的场景”</p>
MonoGame 类库是类库(Windows 商店应用程序)类型!(括号中的内容很重要!大概区别在于 Windows Store 应用程序类型使用 .Net Core,它与 .Net Framework 不同)。
因此,要使其正常工作,您的项目必须是一个类库(Windows 应用商店应用程序),该类库可在“添加新项目”中的 Windows 应用商店选项下使用。
我怀疑问题与项目选项中的“目标框架”有关。
我不知道 MonoGame 如何在 Windows 8 上工作,但是当您为 Android 开发时,目标框架选项是不同版本的 Android [例如 Android 2.2 (Froyo)]。当您创建一个常规类库时,您可以在不同版本的 .NET 框架或 Mono [例如 Mono / .NET 4.0] 之间进行选择。
不幸的是,这些框架彼此不兼容。您不能将 Android 的项目引用添加到 .NET 框架类库中,反之亦然。
解决方案是使用Portable Class Library。它们是专门为处理这个问题而设计的。不利的一面是,您只能访问您选择定位的最低分母中提供的程序集子集。
您可能还需要考虑使用链接文件在项目之间共享代码。它可以使维护变得有点棘手,但可以让您对应该在两个目标框架中编译但不适合可移植类库的代码进行更多控制。这是一个相关的问题:
一旦您了解这里发生了什么,所有这一切的关键就是您如何构建您的解决方案。稍加注意,您几乎可以在不同平台上共享所有代码。
我可能是因为两个项目都使用不同的框架版本并在两个项目的属性部分中更改框架版本,那么您的问题可能会解决。