【问题标题】:Class libraries for MonoTouch projects, getting "not built using active configuration", how to fix?MonoTouch 项目的类库,“未使用活动配置构建”,如何解决?
【发布时间】:2012-03-07 21:25:06
【问题描述】:

我正在尝试构建一组类库,以便在我们将要制作的应用程序之间共享代码。

但是,我无法正确创建项目,也看不出我做错了什么。

让我看看我用来重现这个的步骤,也许这里有人可以看到我做错了什么:

  1. 在新的 MonoDevelop 实例中,我转到 File->New Solution
  2. 我选择了 MonoTouch 库项目模板,并为其命名
  3. 然后我将一个新的应用程序项目添加到解决方案中(以模拟在应用程序中使用库),类型为“iPhone Single View Application”
  4. 我将应用项目设为启动项目
  5. 我在应用程序项目中添加对库项目的引用
  6. 然后我构建

这可行,如果我选择 Run->Debug 菜单项,我可以看到应用程序在模拟器中打开。

假设我现在想在 iPhone 上测试它,所以我访问工具栏中的下拉菜单,选择“Debug|iPhone”构建目标,然后类库项目立即显示为灰色:

(未内置在活动配置中)

If I right-click the solution, check the Configuration mappings, when picking anything related to the simulator or the iPhone, the class library disappears from view altogether and is unable to select for build.

构建目标下拉菜单现在也有 6 个项目,调试、发布、iPhone 的调试/发布和模拟器的调试/发布。显然,只有不适用于 iPhone 或模拟器的 Debug 和 Release 才能构建类库。

我在这里做错了什么?

在另一个我没有幸四处寻找解决方案的项目中,我最终创建了一个空的通用项目,这是缓解这种情况的“正确”方法吗?

【问题讨论】:

  • 我刚试过这个,它看起来坏了。我建议您在bugzilla.xamarin.com 提交错误,以便可以正确跟踪问题。
  • 同样的事情,有什么消息吗?我可以通过始终构建 Debug 解决方案配置然后改回 Debug|iPhone 配置来解决问题,但是很容易忘记,然后想知道为什么在构建之间的类库中进行小的更改时没有将更改部署到 iPhone。在构建和部署之间交换解决方案配置既繁琐又容易出错。
  • 一种解决方法可能是手动编辑您的 *.sln 文件,您是否有另一个可以比较的 *.sln 文件?

标签: xamarin.ios monodevelop class-library


【解决方案1】:

有趣的是,如果您在 App 项目之后添加 Lib 项目,则不会发生这种情况。

我按照您的描述创建了 Lib 项目,然后添加了一个 Single-View iPhone 应用程序,然后添加了另一个 Lib (Lib2)。然后我比较了.sln中的文字,发现Lib缺少以下几行(与Lib2相比):

{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Debug|iPhone.Build.0 = Debug|Any CPU
{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU

{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Release|iPhone.ActiveCfg = Release|Any CPU
{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Release|iPhone.Build.0 = Release|Any CPU
{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU

使用您自己的 GUID 而不是我的。 GUID 将位于文件顶部附近。例如,我的看起来像(滚动到最后):

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lib", "Lib.csproj", "{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}"

然后我重新打开了解决方案,Lib 现在可以在 Debug|iPhoneDebug|iPhoneSimulator 配置中使用。


附带说明,即使 Lib 不会在 Debug|iPhoneDebug|iPhoneSimulator 中构建,来自 Debug 的二进制文件也是兼容的。我可以很好地构建和运行应用程序。

【讨论】:

  • 我发现它实际上是在缺少“.Build.0”部分时发生的,所以只需将它添加到每个条目中即可。真的很烦人,因为它会导致项目出现更多问题。
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 2017-06-06
  • 2017-08-01
  • 2017-05-14
  • 2010-09-07
  • 2013-07-04
相关资源
最近更新 更多