【问题标题】:Is it possible to use a new SDK-style .csproj file for a UWP project?是否可以为 UWP 项目使用新的 SDK 样式的 .csproj 文件?
【发布时间】:2018-09-28 13:57:10
【问题描述】:

是否有人为使用新 SDK 样式 .csproj 格式的 UWP 项目成功创建了 .csproj 文件?我从this question 中获得了关于 WPF 的灵感,这让我了解了 90% 的情况。

在那之后,我开始使用MSBuild.Sdk.Extras package,它使我能够以<TargetFramework> 的形式访问uap10.0,经过一些调整,我得到了它实际上是用以下.csproj 编译的:

<Project Sdk="MSBuild.Sdk.Extras">
  <PropertyGroup>    
    <!--UWP-specific properties-->        
    <TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.17134.0</TargetPlatformVersion>
    <TargetPlatformMinVersion>10.0.17134.0</TargetPlatformMinVersion>
    <TargetFrameworks>uap10.0</TargetFrameworks>
    <OutputType>AppContainerExe</OutputType>    
    <LanguageTargets>$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets</LanguageTargets>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <PackageCertificateKeyFile>Test.UWP_TemporaryKey.pfx</PackageCertificateKeyFile>
  </PropertyGroup>


  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
  </PropertyGroup>


  <PropertyGroup Condition="'$(Configuration)'=='Release'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <Optimize>true</Optimize>
    <PlatformTarget>x86</PlatformTarget>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>  


  <ItemGroup>    

    <!--XAML stuff-->
    <ApplicationDefinition Include="App.xaml">
      <SubType>Designer</SubType>
      <Generator>MSBuild:Compile</Generator>
    </ApplicationDefinition>

    <Page Include="**\*.xaml" Exclude="App.xaml">
      <SubType>Designer</SubType>
      <Generator>MSBuild:Compile</Generator>
    </Page>        
    <Compile Update="**\*.xaml.cs" SubType="Code" DependentUpon="%(Filename)" />

     <AppxManifest Include="Package.appxmanifest">
      <SubType>Designer</SubType>
    </AppxManifest>

    <!--Local projects-->

    <!--Nuget references-->
  </ItemGroup>      

</Project>

但是,仍然存在一些问题:

  • 比较库存 UWP 项目和我的自定义项目时,自定义项目的编译 /bin 目录似乎不包含依赖项 .dll。 (左侧为自定义项目的 /bin 目录,右侧为库存 UWP 项目。)

  • Visual Studio 的智能感知抱怨内置 XAML 类型不受支持。

...这会导致生成的 .exe 在启动时立即崩溃。

有没有人对如何让这个东西到达终点有建议?

【问题讨论】:

  • 在微软更新所有工具之前,请这样并不容易。像github.com/onovotny/MSBuildSdkExtras 这样的尝试还需要时间来足够成熟。
  • 哦,当然。我真的不期待一帆风顺。只是想弄清楚我缺少哪些步骤。 UWP 构建过程非常不透明。

标签: c# .net uwp .net-core


【解决方案1】:

~EDIT MARK II:~ 看起来the current goal 是为了支持.NET Core 3(这意味着新的.csproj 风格)随着WinUI 3.0 的发布,这是针对"some time in 2020" 的发布。

而且,如果链接失效,第一个链接是 WinUI GitHub 问题的链接,WinUI 项目的 PM 表示

我们目前的计划是托管 WinUI 3 应用在发布时使用 .NET Core 3 而不是 .NET Native。

第二个链接是 WinUI 项目的路线图,上面写着:

我们计划在 2020 年发布 WinUI 3.0。

2.预览版:我们计划在 2020 年上半年发布更完整的预览版

~编辑:~ 在 Build 2019 中有一些悄悄宣布,随着 .NET Core 3 的发布,UWP 将开始在 .NET Core 运行时上运行。似乎这将涉及迁移到新的 .csproj 样式UWP 项目也是如此。

原帖:

现在看来,答案是否定的。 Per Claire Novotny,制作MS Build SDK Extras的聪明女士:

您目前不能将 SDK 样式项目用于应用程序本身,只能用于 UWP 类库。项目系统也需要支持以正确的方式部署和启动它。

【讨论】:

  • 虽然据说我们应该能够使用类库来定位 UWP,但没有关于如何做到这一点的解决方案。你有没有得到这方面的文档?
【解决方案2】:

似乎答案是否定的

https://github.com/dotnet/sdk/issues/1408

显然

目前没有计划支持这一点。

【讨论】:

    【解决方案3】:

    第三方sdk,见novotnyllc/MSBuildSdkExtras: Extra properties for MSBuild SDK projects

    <Project Sdk="MSBuild.Sdk.Extras">
      <PropertyGroup>
        <TargetFrameworks>net46;uap10.0.16299;tizen40</TargetFrameworks>
      </PropertyGroup>
    </Project>
    

    【讨论】:

    • 这足以在 SDK 样式项目中引用 UWP TargetFramework,但不能实际构建 UWP 应用程序。您会注意到上面的答案包括 MSBuild.Sdk.Extras 的作者提供的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2018-06-22
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多