【问题标题】:MonoDevelop: Any way to override resources / classes using projects?MonoDevelop:有什么方法可以使用项目覆盖资源/类?
【发布时间】:2012-10-29 05:31:36
【问题描述】:

假设一个解决方案有 2 个项目:ProjectA 和 ProjectB(都是 MonoTouch 应用程序)和 ProjectBase。 ProjectBase 包含整个应用程序,但 Main.cs 文件(带有入口点)位于 ProjectA 和 ProjectB(引用 ProjectBase)。这样,运行任何 A/B 项目都会从 ProjectBase 启动应用程序。

现在,我只想为 ProjectA 覆盖一些东西(它可能是 XIB 文件、图像或 .NET 类)。有什么办法可以设置解决方案,使 ProjectBase 生成的代码和资源与 ProjectA/ProjectB 中的代码和资源合并,后者获胜?

我发现(可能是一种古怪且有点未定义的行为驱动方式)覆盖 XIB:我只是将一个 XIB 放入 ProjectA 和 ProjectB 中,将其命名为与 ProjectBase 中的名称相同他们将其从 ProjectBase 中排除。虽然 MonoDevelop 会编译所有项目,但似乎启动项目的 XIB 优先,因此我在启动 ProjectA 时会看到特定于 ProjectA 的 XIB,而在启动 ProjectB 时会看到特定于 ProjectB 的 XIB。 但是,我不确定它的行为方式是否应该如此,此外,从构建日志中可以看出,所有项目最终都会产生资源。

附:很抱歉,如果以前有人问过这个问题,但我在 SO 上找不到类似的问题。

【问题讨论】:

    标签: xamarin.ios xamarin.android monodevelop xib xamarin


    【解决方案1】:

    我曾经试图为一堆应用程序这样做。我原以为构建顺序是 ProjectBase,然后是 ProjectA,内容复制系统也是一样的……猜猜这意味着我们错了。

    你可以做一些事情。

    A) 构建您自己的程序来复制标记为内容的资源。不会很难,只需要阅读 .csproj 文件。 XML 解析在 .NET 中很容易。在构建后运行此程序。在进行诸如压缩或设备等构建时必须小心,因为我不确定它如何处理构建后事件。

    B)[这就是我所做的] 如果我希望也制作 ProjectC、ProjectD ... ProjectN,我反而制作了一个程序来生成我的程序...(Programception)。 它的功能有 ProjectBase 和 ProjectTempalte。你在这个程序中输入你的新项目名称,比如“MyNewProject”,它将创建正确的文件夹结构,编写正确的 csproj 文件,并更新 SLN 文件。 ProjectTemplate 在 .csproj 文件中有各种占位符,例如 {PLACEHOLDER},Programception 将通过这些占位符查找/替换为我的项目名称。然后图像文件(在您的情况下为 XIB)仅保存在 ProjectA(B..C..N)中,除非我不希望尝试覆盖它们,在这种情况下它们将保留在 ProjectBase 中。这对于我假设的 XIBless 应用程序来说要容易得多。反正我从来不用XIB的。

    希望有帮助!

    【讨论】:

    • 嗯,您的解决方案实际上存在缺陷:最明显的是,一旦您对 ProjectBase 进行了更改,可能需要一些额外的操作才能将它们推送到所有后代应用程序。顺便说一句,MonoForAndroid 似乎已经能够以适当的方式处理资源名称冲突,而 MonoTouch 的出现还为时过早(希望按照bugzilla.xamarin.com/show_bug.cgi?id=8409)。
    • 对不起,我应该补充说它不是一个解决方案,只是一个修复:P 很高兴看到它在错误报告中,并且应该在下一次更新中 :)
    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2013-09-26
    • 2014-10-02
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多