考虑一个解决方案有两个项目: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优先,因此当我启动ProjectB时启动ProjectA和ProjectB特定的XIB时,我会看到ProjectA特定的XIB。 然而,我不确定它应该是什么样的行为,而且,从构建日志中我可以看到,所有项目都会在最后产生资源。
P.S。如果之前已经提出这个问题,我很抱歉,但我无法在SO上找到类似的问题。
答案 0 :(得分:1)
我曾经尝试过为一堆应用做这件事。我原本以为构建顺序是ProjectBase然后是ProjectA,内容复制系统也是一样的......猜猜这意味着我们错了。
你可以做一些事情。
A)构建自己的程序以复制标记为内容的资源。不会很难,只需要阅读.csproj文件。在.NET中,XML解析很容易。在post build上运行此程序。在进行诸如压缩或设备之类的构建时必须要小心,因为我不确定它如何处理构建后事件。
B)[这就是我所做的]如果我期望也制作ProjectC,ProjectD ...... ProjectN我改为制作了一个程序来生成我的程序......(程序)。 它的作用是ProjectBase和ProjectTempalte。您在此程序中输入新项目名称,例如“MyNewProject”,它将创建正确的文件夹结构,编写正确的csproj文件,并更新SLN文件。 ProjectTemplate在.csproj文件中有各种占位符,如{PLACEHOLDER},Programception只会通过我的项目名称查找/替换。然后,图像文件(以及在您的情况下为XIB)仅保存在ProjectA(B..C..N)中,除非我不希望尝试覆盖它们,在这种情况下它们将保留在ProjectBase中。使用我假设的XIBless应用程序,这要容易得多。无论如何我从不使用XIB。
希望有所帮助!