我希望能够从源代码运行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)
也许有更好的方法从源代码运行它并让它与项目集成,我只是错过了它?
这些是我在解决方案文件夹中添加到项目中的项目:
也许我走在正确的道路上,也许不是。目前我仅定位 iOS 我有一个 Android 项目,但我现在并不关心这一点,只是试图将其限制为运行在 iOS 上。如果这是一个问题,我肯定可以改变它。如果我只为 iOS 构建,它不应该关心 Android 部分。也许是吗?
...稍后......
好的修补一下我把它归结为这些包:
当我右键单击解决方案文件夹并选择:“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
,所以至少看起来就知道了。
答案 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
文件并检查每个项目的引用。
Xamarin.Forms.Platform
Xamarin.Forms.Core
Xamarin.Forms.Platform.iOS
Xamarin.Forms.Xaml
Xamarin.Forms.Build.Tasks
Xamarin.Forms.Xaml.Xamlc
Xamarin.Forms.Xaml.Xamlg
接下来,导入此项目时,Xamarin.Forms.Build.Tasks
(Mono.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中的引用添加到两个项目中了。
表单项目
平台项目
那就是它。它现在应该编译,你可以在Xamarin.Forms中添加断点,看看事情是如何运行的。请确保使用Xamarin.Forms将<Import>
节点添加到所有 csproj
文件上方。从它的外观来看,它负责触发XamlC来处理XAML。当你从Nuget安装Xamarin.Forms
时,会为你添加这个。另外,请确保已将上述*.nu
文件复制到解决方案目录的根目录。
请记住,一旦完成修改并决定安装Nuget Xamarin.Forms软件包,您可能需要撤消上面所做的一些更改。例如,检查csproj
文件以确保<Import>
仅来自软件包安装。
如果您遇到编译器错误,请检查Xamarin项目引用。以下是我用于生成上述项目参考列表的Xamarin相关的项目间依赖项。
参考
Xamarin.Forms.Platform
参考
参考
Xamarin.Forms.Core
参考文献
Xamarin.Forms.Core
参考
Xamarin.Forms.Build.Tasks
参考
Xamarin.Forms.Build.Tasks
参考
Xamarin.Forms.Core
Xamarin.Forms.Xaml