behind when using new CSPROJ format
I've created a WPF application using the new CSPROJ format in Visual Studio 2017.
By
I can successfully build and run the application. However, I have an issue in that the code editor does not recognize any controls placed in the XAML, so I get erroneous errors and no intellisense in the editor.
Steps to reproduce
Project file:
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<PropertyGroup>
<LanguageTargets>$(MSBuildExtensionsPath)$(VisualStudioVersion)BinMicrosoft.CSharp.targets</LanguageTargets>
<TargetFramework>net45</TargetFramework>
<ProjectGuid>{030D04DA-D603-4D4C-95F7-B6F725A6829E}</ProjectGuid>
</PropertyGroup>
<PropertyGroup>
<OutputType>WinExe</OutputType>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Compile Update="***.xaml.cs" SubType="Designer" DependentUpon="%(Filename)" />
</ItemGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System.Xaml" />
<Reference Include="WindowsBase" />
</ItemGroup>
</Project>
MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Name="button1" Width="100" Height="50">Click me!</Button>
</Grid>
</Window>
You will see that intellisense does not recognise that the button is defined:
However, the project builds and runs successfully (note you will need to run the executable manually - F5 doesn't work...)
A slight improvement on your previous answer is to include the .g.cs files, but mark them as not visible so they do not show in the solution. You will then also need to mark the BaseIntermediateOutputPath as not visible otherwise it shows up as an empty folder.
This gives the same behaviour but looks tidier as you're not seeing the obj folder in the solution explorer.
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="***.xaml" SubType="Designer" Generator="MSBuild:Compile" Exclude="App.xaml" />
<Compile Update="***.xaml.cs" SubType="Designer" DependentUpon="%(Filename)" />
<Compile Include="$(IntermediateOutputPath)*.g.cs" Visible="false" />
<None Include="$(BaseIntermediateOutputPath)" Visible="false" />
</ItemGroup>
One slightly hacky solution is to edit the project file to add the generated classes. Unfortunately, I can't work out how to make the file be DependentUpon the XAML file - I think that only works for files in the same folder.
In addition, you need to use MSBuild:UpdateDesignTimeXaml
instead of MSBuild:Compile
, as described here
Finally, it appears you have to explicitly name every "Include" in the "Page" element - you can't use wildcards.
<Project>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</ApplicationDefinition>
<Page Include="MainWindow.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</Page>
<Compile Update="***.xaml.cs" DependentUpon="%(Filename)" />
<!-- ADD THIS LINE HERE TO INCLUDE THE GENERATED PARTIAL CLASSES -->
<!-- ENSURE YOU ARE USING THE g.cs AND NOT g.i.cs FILES
OR YOU WILL GET A BUILD FAILURE -->
<Compile Include="$(IntermediateOutputPath)***.g.cs" />
</ItemGroup>
链接地址: http://www.djcxy.com/p/39606.html
上一篇: 在Webpack生产配置中设置代理Angular 2+
下一篇: 在使用新的CSPROJ格式后面