【问题标题】:Xamarin Xaml and MultitargetingXamarin Xaml 和多目标
【发布时间】:2019-01-12 18:52:54
【问题描述】:

我正在为 Xamarin Forms 项目创建一个多目标类库,该项目将面向 .NET Standard 2.0、MonoAndroid 8.1 和 Xamarin.iOS 1.0。我了解如何根据平台有条件地包含用于编译的文件,以包含特定于平台的渲染器和实用程序。

我需要知道如何以不会破坏 resharper 和智能感知的方式包含 *.xaml 文件,并且不会因为 InitializeComponent 在 ContentPage 中脱离上下文而发出误报。设置 xaml 文件以构建动作 EmbeddedResource,使用 csproj 中的自定义工具 UpdateDesignTimeXaml,以及要编译的文件背后的代码,未检测到部分类,resharper 停止提供帮助等。

针对这些平台并包含 xaml 资源的多目标项目的 csproj 文件是什么样的?

【问题讨论】:

  • 您找到解决问题的方法了吗?
  • 并非如此。我进行了重组,以便在多目标项目中不包含 xaml 文件。

标签: c# xaml xamarin.forms msbuild multitargeting


【解决方案1】:

我从头开始创建了一个新的 Multitargetproject,现在我还可以包含 Xaml 文件。 我唯一的问题是,当我添加例如 Test.shared.xaml 或 Test.shared.cs 时,我必须转到项目文件并删除以下生成的行:

<Project Sdk="MSBuild.Sdk.Extras">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netcoreapp2.0;net461;MonoAndroid90;Xamarin.iOS10</TargetFrameworks>

    <Product>$(AssemblyName) ($(TargetFramework))</Product>
    <AssemblyVersion>1.0.0.0</AssemblyVersion>
    <AssemblyFileVersion>1.0.0.0</AssemblyFileVersion>
    <Version>1.0.0.0</Version>
    <PackageVersion>1.0.0.0</PackageVersion>
    <PackOnBuild>true</PackOnBuild>
    <NeutralLanguage>en</NeutralLanguage>
    <LangVersion>default</LangVersion>
    <DefineConstants>$(DefineConstants);</DefineConstants>

    <UseFullSemVerForNuGet>false</UseFullSemVerForNuGet>
    <EnableDefaultCompileItems>false</EnableDefaultCompileItems>

    <LangVersion>latest</LangVersion>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)'=='Debug' ">
    <DebugType>full</DebugType>
    <DebugSymbols>true</DebugSymbols>
    <GenerateDocumentationFile>false</GenerateDocumentationFile>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)'=='Release' ">
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <DebugType>pdbonly</DebugType>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="**\*.shared.cs" />
    <Compile Include="**\*.shared.xaml.cs" />
  </ItemGroup>
    <ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
  </ItemGroup>

  <ItemGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) ">
    <Compile Include="**\*.android.cs" />
  </ItemGroup>

  <ItemGroup Condition=" $(TargetFramework.StartsWith('Xamarin.iOS')) ">
    <Compile Include="**\*.apple.cs" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Xamarin.Forms" Version="4.3.0.819712-pre2" />
    <PackageReference Include="Xamarin.Forms.PancakeView" Version="1.2.1" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'MonoAndroid90'">
    <PackageReference Include="Plugin.CurrentActivity">
      <Version>2.1.0.4</Version>
    </PackageReference>
  </ItemGroup>

</Project>

还有应该在项目根目录中的 global.json

  "sdk": {
    "version": "3.0.100-preview"
  },
  "msbuild-sdks": {
    "MSBuild.Sdk.Extras": "2.0.46"
  }
}

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多