Sdk: XAML files are not supported

Created on 3 Feb 2017  路  8Comments  路  Source: dotnet/sdk

Attached is a simple repro solution.
WpfCps.zip

Issue 1: XAML files are treated as None, when they should be treated as Page with Generator=MSBuild:Compile and SubType=Designer metadata.
Issue 2: Page items are not visible in the Solution Explorer
Issue 3: xaml.cs files are not properly nested under the xaml file
Issue 4: Compilation fails with: 1>C:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFx.targets(419,45): error MSB4057: The target "CoreCompile" does not exist in the project.

Feature Request

Most helpful comment

more complete version of the workarounds i use these days - import this at the end of a csproj

<Project>  
  <!-- https://github.com/dotnet/sdk/issues/810 - the temporary project has the wrong file extension -->
  <PropertyGroup>
    <LanguageTargets>$(MSBuildToolsPath)\Microsoft.CSharp.targets</LanguageTargets>
    <StartWorkingDirectory Condition="'$(OutputType)' == 'WinExe'">bin/$(Configuration)/$(TargetFramework)</StartWorkingDirectory>
  </PropertyGroup>

  <!-- Page items aren't included by the SDK -->
  <ItemGroup>
    <Page Include="**\*.xaml" Exclude="@(ApplicationDefinition)" SubType="Designer" Generator="MSBuild:Compile" />
    <Compile Update="**\*.xaml.cs" SubType="Code" DependentUpon="%(Filename)" />
    <UpToDateCheckInput Include="**\*.xaml" />
  </ItemGroup>

  <!-- https://github.com/dotnet/project-system/issues/2488 - .g.cs files don't get built -->
  <Target Name="WorkaroundForXAMLIntellisenseBuildIssue" AfterTargets="_CheckCompileDesignTimePrerequisite">
    <PropertyGroup>
      <BuildingProject>false</BuildingProject>
    </PropertyGroup>
  </Target>
</Project>

All 8 comments

FYI. @srivatsn, @jinujoseph, @nguerrera

This completely blocks the porting of WPF based applications to CPS (I imagine it would also block UWP and anything else that uses XAML).

Yes WPF and any other desktop projects are not supported yet. Currently only .NET Core projects are supported.

This issue was moved to dotnet/roslyn-project-system#1467

It seems like this issue is more about whether you can build a WPF project successfully rather than whether the IDE supports it.

Yes. I can manually override things (as I did in the sample) so that the UI designer in VS and everything else works.

I would think that, of the four issues I listed, two of them are applicable to the SDK repository (as they impact command line builds) and two to the Project System repository (they really only impact the IDE).

SDK

  • Issue 1: XAML files are treated as None, when they should be treated as Page with Generator=MSBuild:Compile and SubType=Designer metadata.
  • Issue 4: Compilation fails with: 1>C:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.WinFx.targets(419,45): error MSB4057: The target "CoreCompile" does not exist in the project.

Project System:

  • Issue 2: Page items are not visible in the Solution Explorer
  • Issue 3: xaml.cs files are not properly nested under the xaml file

here are some workarounds for now

issues 1 and 2:
<Page Include="**\*.xaml" SubType="Designer" Generator="MSBuild:Compile" />

issue 3:
<Compile Update="**\*.xaml.cs" SubType="Code" DependentUpon="%(Filename)" />

issue 4:
<LanguageTargets>$(MSBuildToolsPath)\Microsoft.CSharp.targets</LanguageTargets>

more complete version of the workarounds i use these days - import this at the end of a csproj

<Project>  
  <!-- https://github.com/dotnet/sdk/issues/810 - the temporary project has the wrong file extension -->
  <PropertyGroup>
    <LanguageTargets>$(MSBuildToolsPath)\Microsoft.CSharp.targets</LanguageTargets>
    <StartWorkingDirectory Condition="'$(OutputType)' == 'WinExe'">bin/$(Configuration)/$(TargetFramework)</StartWorkingDirectory>
  </PropertyGroup>

  <!-- Page items aren't included by the SDK -->
  <ItemGroup>
    <Page Include="**\*.xaml" Exclude="@(ApplicationDefinition)" SubType="Designer" Generator="MSBuild:Compile" />
    <Compile Update="**\*.xaml.cs" SubType="Code" DependentUpon="%(Filename)" />
    <UpToDateCheckInput Include="**\*.xaml" />
  </ItemGroup>

  <!-- https://github.com/dotnet/project-system/issues/2488 - .g.cs files don't get built -->
  <Target Name="WorkaroundForXAMLIntellisenseBuildIssue" AfterTargets="_CheckCompileDesignTimePrerequisite">
    <PropertyGroup>
      <BuildingProject>false</BuildingProject>
    </PropertyGroup>
  </Target>
</Project>
Was this page helpful?
0 / 5 - 0 ratings