我的Xamarin iOS项目中有一个PCL.在VS工作,我发现要改变iOS应用程序中反映的PCL,我必须执行以下所有操作:
我可以简化此工作流程吗?我确实有从iOS项目到PCL项目的构建依赖项.但它似乎没有帮助.
我已经创建了一个PCL项目,无论何时我尝试添加来自Nuget的引用我都有这样的错误:(所有包都会出现此错误)
无法安装包'Microsoft.Bcl.Build 1.0.13'.您正在尝试将此软件包安装到以"portable-Unsupported"为目标的项目中,但该软件包不包含与该框架兼容的任何程序集引用或内容文件.有关更多信息,请与软件包作者联系.System.InvalidOperationException:无法安装包'Microsoft.Bcl.Build 1.0.13'.您正在尝试将此软件包安装到以"portable-Unsupported"为目标的项目中,但该软件包不包含与该框架兼容的任何程序集引用或内容文件.有关更多信息,请与软件包作者联系.在NuGet.ProjectManager.ExtractPackageFilesToProject(IPackage包)[0x00000]中:0在NuGet.ProjectManager.AddPackageReferenceToProject(IPackage包)[0x00000] in:0在NuGet.ProjectManager.Execute(NuGet.PackageOperation操作)[0x00000] in:0
在NuGet.ProjectManager.Execute(IPackage包,IPackageOperationResolver解析器)[0x00000]中:0在NuGet.ProjectManager.AddPackageReference(IPackage包,布尔ignoreDependencies,布尔allowPrereleaseVersions)[0x00000] in:0在NuGet.ProjectManager.AddPackageReference(系统. String packageId,NuGet.SemanticVersion version,Boolean ignoreDependencies,Boolean allowPrereleaseVersions)[0x00000] in:0 at ICSharpCode.PackageManagement.SharpDevelopPackageManager.AddPackageReference(IPackage package,Boolean ignoreDependencies,Boolean allowPrereleaseVersions)[0x00000] in:0 at ICSharpCode.PackageManagement.SharpDevelopPackageManager .InstallPackage(IPackage包,ICSharpCode.PackageManagement.InstallPackageAction installAction)[0x00000] in:0,ICSharpCode.PackageManagement.PackageManagementProject.InstallPackage(IPackage package,ICSharpCode.PackageManagement.InstallPackageAction installAction)[0x00000] in:0 at ICSharpCode.PackageManagement.InstallPackageAction.ExecuteCore()[0x00000] in:0 at ICSharpCode.PackageManagement.ProcessPackageAction.Execute()[0x00000] in:0,ICSharpCode.PackageManagement.PackageActionRunner.Run(IPackageAction action)[0x00000] in:0 at ICSharpCode.PackageManagement.PackageViewModel.InstallPackage(IEnumerable`1 packageOperations)[0x00000] in:0
at ICSharpCode.PackageManagement.PackageViewModel.InstallPackage()[0x00000] in:0 at ICSharpCode.PackageManagement.PackageViewModel.TryInstallingPackage()[0x00000] in:0
这是关于我的环境的信息
=== Xamarin Studio ===
Version 4.2.2 (build 2)
Runtime:
Mono 3.2.5 ((no/964e8f0)
GTK+ 2.24.20 theme: Raleigh
GTK# (2.12.0.0)
Package version: 302050000
=== Xamarin.Android ===
Version: 4.10.1 (Business Edition)
Android SDK: /Users/luigisaggese/Library/Developer/Xamarin/android-sdk-mac_x86
Supported …Run Code Online (Sandbox Code Playgroud) 我需要获取动态调用作为参数的静态属性的属性名称.这是我的可移植类库代码:
public partial class Test
{
public Test()
{
string staticPropName = Test.GetPropName(Test.Row); // result must be "Row" without additional string
System.Diagnostics.Debug.WriteLine("propName=" + staticPropName);
}
public static int Row { get; set; }
public static string GetPropName(object Property)
{
return "Row"; // using reflection
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道属性的名称,我不想用额外的字符串来定义它.
我对MVVMCross和MVVM架构比较陌生.
我试图保持我的CodeBehind尽可能干净,所以我一直Interactivity:Interaction.Behaviors用来点击一个Item时触发一个命令:
<views:MvxStorePage.Resources>
<core:Theme x:Key="Theme"/>
<b:NameScopeBinding x:Key="ModuleGridView" Source="{Binding ElementName=ModuleGridView}" />
</views:MvxStorePage.Resources>
...
<GridView x:Name="ModuleGridView" >
...
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="SelectionChanged">
<Core:InvokeCommandAction Command="{Binding SelectModuleCommand}" CommandParameter="{Binding Source.SelectedItem, Source={StaticResource ModuleGridView}}" />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
...
</GridView>
Run Code Online (Sandbox Code Playgroud)
在我的ViewModel中:
MvxCommand<object> _selectModuleCommand;
public ICommand SelectModuleCommand
{
get
{
_selectModuleCommand = _selectModuleCommand ?? new MvxCommand<object>((obj) => SelectModule(obj));
return _selectModuleCommand;
}
}
private void SelectModule(object module)
{
var test = 1;
}
Run Code Online (Sandbox Code Playgroud)
问题是传入的对象SelectModule是ItemClickedEventArgs我的ViewModel所在的PCL核心项目中不可用的类型.所以我无法访问该ItemClicked对象的属性.
我试过从'InvokeCommandAction'中使用它
<Core:InvokeCommandAction Command="{Binding SelectModuleCommand}" CommandParameter="{Binding Source.SelectedItem.ClickedItem, Source={StaticResource ModuleGridView}}" /> …Run Code Online (Sandbox Code Playgroud) 我终于在VS2015上安装了VS2015,以避免为单独安装必要的组件而烦恼,但是现在在构建时遇到了一个新错误。
在我的解决方案上运行MSBuild会产生以下错误:
"C:\Users\Bamboo\bamboo-home\xml-data\build-dir\IMP-COOK-JOB1\Imp.Cook.Api\Imp.Cook.Api.sln" (default target) (1) ->
"C:\Users\Bamboo\bamboo-home\xml-data\build-dir\IMP-COOK-JOB1\Imp.Cook.Api\Imp.Cook.Api\Imp.Cook.Api.csproj" (default target) (2) ->
"C:\Users\Bamboo\bamboo-home\xml-data\build-dir\IMP-COOK-JOB1\Imp.Cook.Api\Imp.Cook.Models\Imp.Cook.Models.csproj" (default target) (3) ->
(ResolveNuGetPackageAssets target) ->
C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.targets(89,5):
error : The package Microsoft.CSharp with version 4.0.0 could not be found in
C:\Users\Bamboo\.nuget\packages.
Run a NuGet package restore to download the package.
Run Code Online (Sandbox Code Playgroud)
现在,我可以在Bamboo用户目录中手动创建一个.nuget文件夹,这会有所帮助(在下一个包中仍然失败Microsoft.NETCore.Portable.Compatibility)。
但是我在这里错过了什么难题呢?我nuget restore在运行msbuild之前先运行,它获取直接在项目中使用的软件包。
Imp.Cook.Models 是针对Windows 10通用应用程序和.NET 4.6的可移植类库。
生成服务器正在运行Windows Server 2012。
我只是想知道在 Xamarin.Forms 中使用 PCL 有什么好处。我的意思是你无论如何都要在每个平台之间共享代码。在 Xamarins 本机方法中,它非常清楚。所以也许有人可以告诉我为什么在 Xamarin.Forms 中使用 PCL?