如何从我的项目源代码中运行Xamarin.Forms,因此我可以在Xamarin.Froms

时间:2017-07-01 17:52:03

标签: xamarin xamarin.ios xamarin.forms

我希望能够从源代码运行Xamarin.Forms,这样我就可以在其中设置断点等。我想这样做主要是因为我可以看到事情如何被调用,所以我可以更好地理解它是如何工作的,以回应我在我的应用程序中使用它。我不想在最终的应用程序中这样做,我只是想最终换掉nuget包的源代码版本。在开发过程中,我希望看到它如何运行以更好地理解我如何操作/覆盖/实现不同的细节。

到目前为止,我已经接近使用我的项目进行编译了,但是我得到了2个构建问题,这些问题与Xamarin.Forms.Conrols.Issues相关。我认为它们只是单元测试,但它会停止构建。

  

/Users/username/github/Xamarin/Xamarin.Forms/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla39636.xaml:错误:对象引用未设置为对象的实例(Xamarin.Forms.Controls)

并且

  

/Users/username/github/Xamarin/Xamarin.Forms/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/PlatformSpecifics_iOSTranslucentNavBarX.xaml:错误:对象引用未设置为对象的实例(Xamarin.Forms.Controls)

也许有更好的方法从源代码运行它并让它与项目集成,我只是错过了它?

这些是我在解决方案文件夹中添加到项目中的项目:

Visual Studio Mac Projects

也许我走在正确的道路上,也许不是。目前我定位 iOS 我有一个 Android 项目,但我现在并不关心这一点,只是试图将其限制为运行在 iOS 上。如果这是一个问题,我肯定可以改变它。如果我只为 iOS 构建,它​​不应该关心 Android 部分。也许是吗?

...稍后......

好的修补一下我把它归结为这些包:

enter image description here

当我右键单击解决方案文件夹并选择:“Build Xamarin.Forms”时,构建成功。当我尝试构建应用程序的Form项目时,它只会失败并出现以下错误:

  

/Users/username/github/Xamarin/MyProject/App.xaml.cs(13,13):错误CS0103:当前上下文中不存在名称“InitializeComponent”(CS0103)(MyProject)

每当它引用Xamarin.Forms中的任何内容或者它试图从后面的代码中访问某个XAML中的x:Name时,我会收到51个错误。

Intellisense 也会看到这个方法,在这种情况下InitializeComponent,所以至少看起来就知道了。

1 个答案:

答案 0 :(得分:0)

好的,我明白了。以下是我的表现方式:

从github克隆Xamarin.Forms repo:

https://github.com/xamarin/Xamarin.Forms

以下内容适用于Xamarin.Forms 2.3.4.247

cd进入新克隆的repo并签出对应于Xamarin Forms v2.3.4.247的标签:

$ git clone git@github.com:xamarin/Xamarin.Forms.git
$ cd Xamarin.Forms
$ git checkout 2.3.4-2

将这些项目添加到您的项目中。我将它们放在Visual Studio Mac项目中的新解决方案文件夹中。我只关心iOS。对Android来说类似,只需添加那些特定的库。为了计算依赖关系我刚刚打开Xamarin.Forms.sln文件并检查每个项目的引用。

  1. Xamarin.Forms.Platform
  2. Xamarin.Forms.Core
  3. Xamarin.Forms.Platform.iOS
  4. Xamarin.Forms.Xaml
  5. Xamarin.Forms.Build.Tasks
  6. Xamarin.Forms.Xaml.Xamlc
  7. Xamarin.Forms.Xaml.Xamlg
  8. 接下来,导入此项目时,Xamarin.Forms.Build.TasksMono.Cecil的更新包丢失了。它在包列表UI中有一个小警告图标)

    现在cd到您的项目文件夹并复制.nu*回购中的Xamarin.Forms个文件:

    $ ls -1
    
    Xamarin.Forms
    YourProject
    
    $ cd YourProject
    $ cp -r ../Xamarin.Forms/.nu* ./
    

    之后,在以下csproj个文件(表单项目和平台项目)中:

    • YourProject/YourProject/YourProject.csproj
    • YourProject/iOS/SourceTest.iOS.csproj

    文件在<Import>

    之前的底部添加以下</Project>
    <Import Project="..\.nuspec\Xamarin.Forms.targets" Condition="Exists('..\.nuspec\Xamarin.Forms.targets')" />
    

    请注意,这是引用我们上面复制的文件。

    最后,是时候将Visual Studio中的引用添加到两个项目中了。

    表单项目

    Forms Project References

    平台项目

    Platform Project References

    那就是它。它现在应该编译,你可以在Xamarin.Forms中添加断点,看看事情是如何运行的。请确保使用Xamarin.Forms将<Import>节点添加到所有 csproj文件上方。从它的外观来看,它负责触发XamlC来处理XAML。当你从Nuget安装Xamarin.Forms时,会为你添加这个。另外,请确保已将上述*.nu文件复制到解决方案目录的根目录。

    请记住,一旦完成修改并决定安装Nuget Xamarin.Forms软件包,您可能需要撤消上面所做的一些更改。例如,检查csproj文件以确保<Import>仅来自软件包安装。

    如果您遇到编译器错误,请检查Xamarin项目引用。以下是我用于生成上述项目参考列表的Xamarin相关的项目间依赖项。

    Xamarin.Forms.Core

    参考

    • Xamarin.Forms.Platform

    Xamarin.Forms.Platform

    参考

    Xamarin.Forms.Platform.iOS

    参考

    • Xamarin.Forms.Core

    Xamarin.Forms.Xaml

    参考文献

    • Xamarin.Forms.Core

    Xamarin.Forms.Xaml.Xamlc

    参考

    • Xamarin.Forms.Build.Tasks

    Xamarin.Forms.Xaml.Xamlg

    参考

    • Xamarin.Forms.Build.Tasks

    Xamarin.Forms.Build.Tasks

    参考

    • Xamarin.Forms.Core
    • Xamarin.Forms.Xaml