重命名MonoTouch MonoDevelop中的控制器类



重命名继承UIViewController并具有链接到情节提要的designer.cs类的类的最佳方法是什么?

我第一次尝试在MonoDevelop中重命名.cs文件。这起到了作用,但designer.cs文件和类名都没有随之重命名。

然后我重命名了类名。这成功地更改了.cs和.designer.cs文件中的类名,但仍然没有更改.designer.cs文件名。它也没有更改Xcode中控制器的"自定义类"的名称。

因此,在XCode中,我更改了自定义类的名称并保存,然后切换回MonoDevelop,令我恐惧的是,它创建了一个与重命名的名称相同的新.cs,以及一个新的.designer.cs文件,它将其放在旧(未重命名)a.designer.cs文件旁边的原始(重命名).cs文件下!

有人能告诉我应该采取的步骤顺序吗?

重命名文件很棘手,因为MD不支持重命名分组文件。您必须手动编辑csproj,或者从项目中删除文件,在Finder中重命名,然后将它们添加回来。

重命名类稍微容易一些,但关键是要理解类实际上有两个名称——.NET名称和Obj-C名称。重命名.NET名称应该很容易,只需在MD中使用rename命令即可。

Obj-C名称应用于[Register("SomeName")]属性上的类,是xibs和Xcode中使用的名称。但是,请注意,MonoDevelop将尝试创建它认为在Xcode中创建的任何类的.NET对应项。这意味着您应该首先更改MonoDevelop中的Obj-C名称,然后切换到Xcode并更改那里的Custom Class。

您必须进入.csproj文件并添加一个标记。例如:

   <Compile Include="MainWindow.cs" />
    <Compile Include="MainWindow.designer.cs">
      <DependentUpon>MainWindow.cs</DependentUpon>
    </Compile>

这将在MonoDevelop项目窗口中显示文件之间的正确关系。

顺便说一句,我到目前为止的经验是,这种依赖纯粹是为了方便。将新的designer.cs文件添加到解决方案中,代码编译得很好:依赖关系似乎是一种文档。

另外:要删除或重命名这些依赖文件,你不能在MonoDevelop项目窗格中这样做:你必须转到Finder(如果你在OSX中,则转到Explorer,如果你在Windows中)并处理那里的文件,重命名或以其他方式操作它们,然后手动修复MonoDevelopcsproj文件。好消息是,这并不难,当你这样做的时候,效果很好,你会对项目是如何结合在一起有一个很酷的新的核心理解。

许多人还必须考虑版本控制系统。这种方式对我有效:

  1. 退出MonoDevelop
  2. 在版本控制系统中,重命名文件
  3. 在文本编辑器中打开csproj文件-search&替换
  4. Open MonoDevelop
  5. 打开XxxViewController.cs-search&替换
  6. 打开XxxViewController.designer.cs-search&替换
  7. 打开XxxViewController.xib-search&替换

您可能会倾向于使用Refactor/Rename而不是search&在步骤5中替换,但这将导致MonoDevelop出于某种原因将XxxViewController.designer.cs重命名为XxxViewController_1.cs。

此外,在版本控制系统中重命名文件之前,您可能会从项目中删除这些文件,然后再次将它们添加回您的项目中(这样您就不必手动编辑csproj文件)。这将起作用,但"DependentUpon"部分将从csproj文件中消失,这将导致设计器文件不低于其对应文件。没什么大不了的,但它在解决方案资源管理器中看起来不那么好看。

我尝试了上面所有的解决方案,但都没有成功。最后,我只是使用了"在文件中替换"来查看整个解决方案。在那之后,我在项目中进行了"重建",并做得很好。

最新更新