2

考虑一个解决方案有 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。但是,我不确定它的行为方式是否应该如此,此外,从构建日志中可以看出,所有项目最终都会产生资源。

PS如果之前有人问过这个问题,我很抱歉,但我无法在 SO 上找到类似的问题。

4

1 回答 1

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的。

希望有帮助!

于 2012-11-15T05:34:17.480 回答