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

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

让我完成用于重现此操作的步骤,也许这里的人可以看到我做错了什么:

  • 在一个新的MonoDevelop实例中,我转到File-> New Solution
  • 我选择了MonoTouch库项目模板,并给它一个适当的名称
  • 然后,我将类型为“iPhone Single View Application”的新应用程序项目添加到解决方案中(以使用应用程序中的库进行模拟)
  • 我将应用程序项目作为启动项目
  • 我在应用程序项目
  • 中添加了对库项目的引用
  • 然后我建立

  • 这行得通,并且如果我选择Run-> Debug菜单项,我会看到应用程序在模拟器中打开。

    假设我现在想在iPhone上进行测试,因此访问工具栏上的下拉列表,选择“Debug | iPhone”构建目标,然后立即使用以下命令将类库项目显示为灰色:



    如果我右键单击解决方案,请检查“配置”映射,在选择与模拟器或iPhone相关的任何内容时,类库将完全从 View 中消失,并且无法选择进行构建。

    生成目标下拉列表现在还有6个项目,分别是Debug,Release,iPhone的Debug/release和模拟器的Debug/release。显然,只有不适用于iPhone或模拟器的Debug and Release才能构建类库。

    我在这里做错了什么?

    在另一个我没有能力寻求解决方案的奢侈项目中,我最终创建了一个空的通用项目,这是减轻这种情况的“正确”方法吗?

    最佳答案

    有趣的是,如果在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。 GUID将位于文件顶部附近。例如,我的看起来像(滚动到末尾):
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lib", "Lib.csproj", "{A9A8640A-C650-46AB-A21C-DF3B5D22BAA3}"
    

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

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

    10-07 19:22
    查看更多