2017-05-23 2 views
5

ich mit der Migration ein WPF-Projekt am Experimentieren, definiert das alte csproj Format, in das neue Format unter VS 2017.WPF App Mit neuen csproj Format

konnte ich die meisten der Weg zu einem erfolgreichen Build erhalten mit Informationen, die ich bei How-to migrate Wpf projects to the new VS2017 format gefunden habe.

Aber ich bin stecken in Vergangenheit diesen Fehler:

error CS5001: Program does not contain a static 'Main' method suitable for an entry point

Mein neuer Stil csproj Datei ist wie folgt:

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <LanguageTargets>$(MSBuildExtensionsPath)\$(VisualStudioVersion)\Bin\Microsoft.CSharp.targets</LanguageTargets> 
    <OutputType>winexe</OutputType> 
    <TargetFramework>net47</TargetFramework> 
    <ApplicationIcon /> 
    <OutputTypeEx>winexe</OutputTypeEx> 
    <StartupObject /> 
    </PropertyGroup> 

    <ItemGroup> 
    <EmbeddedResource Update="Properties\Resources.resx" Generator="ResXFileCodeGenerator" LastGenOutput="Resources.Designer.cs" /> 
    <Compile Update="Properties\Resources.Designer.cs" DesignTime="True" AutoGen="True" DependentUpon="Resources.resx" /> 
    <Compile Update="Settings.Designer.cs" AutoGen="True" DependentUpon="Settings.settings" /> 
    <None Update="Settings.settings" LastGenOutput="Settings.Designer.cs" Generator="SettingsSingleFileGenerator" /> 

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

    <Resource Include="assets\*.*" /> 
    </ItemGroup> 

    <ItemGroup> 
    <PackageReference Include="Autofac" Version="4.6.0" /> 
    <PackageReference Include="Autofac.Extras.CommonServiceLocator" Version="4.0.0" /> 
    <PackageReference Include="Extended.Wpf.Toolkit" Version="3.0.0" /> 
    <PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="1.0.8" /> 
    <PackageReference Include="MaterialDesignColors" Version="1.1.3" /> 
    <PackageReference Include="MaterialDesignThemes" Version="2.3.0.823" /> 
    <PackageReference Include="MvvmLightLibs" Version="5.3.0" /> 
    <PackageReference Include="Serilog" Version="2.4.0" /> 
    <PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" /> 
    </ItemGroup> 

    <ItemGroup> 
    <ProjectReference Include="..\..\WPFUtilities\J4JUI\J4JUI.csproj" /> 
    </ItemGroup> 

    <ItemGroup> 
    <Reference Include="System.ComponentModel.DataAnnotations" /> 
    </ItemGroup> 

    <Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" /> 
</Project> 

Wie kann ich die csproj Datei, so dass die Eintrittsstelle konfigurieren wird gebaut?

aktualisieren

an der Spitze über Application Basierend ich das Projekt bekommen konnte zu kompilieren. Ich konnte ApplicationDefinition nicht in BuildAction setzen - es war nicht eine der Möglichkeiten - sondern musste die csproj-Datei manuell bearbeiten, um sie aufzunehmen. Hier ist die Arbeitsversion:

<Project Sdk="Microsoft.NET.Sdk"> 

    <PropertyGroup> 
    <LanguageTargets>$(MSBuildExtensionsPath)\$(VisualStudioVersion)\Bin\Microsoft.CSharp.targets</LanguageTargets> 
    <OutputType>winexe</OutputType> 
    <TargetFramework>net47</TargetFramework> 
    <ApplicationIcon /> 
    <OutputTypeEx>winexe</OutputTypeEx> 
    <StartupObject /> 
    </PropertyGroup> 

    <ItemGroup> 
    <EmbeddedResource Update="Properties\Resources.resx" Generator="ResXFileCodeGenerator" LastGenOutput="Resources.Designer.cs" /> 
    <Compile Update="Properties\Resources.Designer.cs" DesignTime="True" AutoGen="True" DependentUpon="Resources.resx" /> 
    <Compile Update="Settings.Designer.cs" AutoGen="True" DependentUpon="Settings.settings" /> 
    <None Update="Settings.settings" LastGenOutput="Settings.Designer.cs" Generator="SettingsSingleFileGenerator" /> 

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

    <Resource Include="assets\*.*" /> 

    <ApplicationDefinition Include="App.xaml"> 
     <Generator>MsBuild:Compile</Generator> 
     <SubType>Designer</SubType> 
    </ApplicationDefinition> 

    </ItemGroup> 

    <ItemGroup> 
    <PackageReference Include="Autofac" Version="4.6.0" /> 
    <PackageReference Include="Autofac.Extras.CommonServiceLocator" Version="4.0.0" /> 
    <PackageReference Include="Extended.Wpf.Toolkit" Version="3.0.0" /> 
    <PackageReference Include="Hardcodet.NotifyIcon.Wpf" Version="1.0.8" /> 
    <PackageReference Include="MaterialDesignColors" Version="1.1.3" /> 
    <PackageReference Include="MaterialDesignThemes" Version="2.3.0.823" /> 
    <PackageReference Include="MvvmLightLibs" Version="5.3.0" /> 
    <PackageReference Include="Serilog" Version="2.4.0" /> 
    <PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" /> 
    </ItemGroup> 

    <ItemGroup> 
    <ProjectReference Include="..\..\WPFUtilities\J4JUI\J4JUI.csproj" /> 
    </ItemGroup> 

    <ItemGroup> 
    <Reference Include="System.ComponentModel.DataAnnotations" /> 
    </ItemGroup> 

    <Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" /> 
</Project> 

Beachten Sie auch den Filter Ausschließen der Richtlinie. Es ist erforderlich, MSBuild davon abzuhalten, App.xaml.cs zweimal zu kompilieren.

+0

Sie sind ein Heiliger. – damageboy

Antwort

4

Sie müssen die Build-Aktion von App.xaml auf ApplicationDefinition setzen. Das Ergebnis ist der folgende Artikel in Ihrer csproj Datei:

<ApplicationDefinition Include="App.xaml"> 
    <Generator>MSBuild:Compile</Generator> 
    <SubType>Designer</SubType> 
</ApplicationDefinition> 
+0

Danke! Ich musste herausfinden, wo ich dieses XML in der csproj-Datei platzieren sollte, da BuildAction keine Option für ApplicationDefinition bot. –

+0

Sie sind auch ein Heiliger! – damageboy