c# - español - Cómo migrar proyectos Wpf al nuevo formato VS2017
wpf c# ejemplos (4)
Estoy migrando mis proyectos al nuevo formato de Visual Studio 2017, que funciona bien para todas las bibliotecas estándar, solo que ahora tengo problemas con las bibliotecas de UI donde uso Wpf / Xaml.
No puedo averiguar cómo hacer esto para mis controles de usuario. El artículo antiguo ya no parece ser válido.
Alguien tiene una idea de cómo hacer esto o si es posible.
Después de un poco de búsqueda y prueba y error lo puse funcionando!
Este es el wpf final csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LanguageTargets>$(MSBuildExtensionsPath)/$(VisualStudioVersion)/Bin/Microsoft.CSharp.targets</LanguageTargets>
<TargetFrameworks>net451</TargetFrameworks>
<RootNamespace>MyWpfLibrary</RootNamespace>
<AssemblyName>MyWpfLibrary</AssemblyName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Rx-Xaml" Version="2.2.5" />
<PackageReference Include="reactiveui-core" Version="7.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="MyOtherLibrary.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="ReachFramework" />
<Reference Include="System.Net" />
<Reference Include="System.Printing" />
<Reference Include="System.Xaml" />
</ItemGroup>
<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"/>
<Page Include="**/*.xaml" SubType="Designer" Generator="MSBuild:Compile" />
<Compile Update="**/*.xaml.cs" SubType="Designer" DependentUpon="%(Filename)" />
<Resource Include="Fonts/*.otf" />
<Resource Include="Images/*.png" />
</ItemGroup>
<Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists(''$(MSBuildSDKExtrasTargets)'')" />
</Project>
La solución anterior funciona para Wpf dll''s, pero la revertí porque Resharper y el diseñador de Visual Studio dejaron de funcionar después de este cambio. Principalmente porque no pudieron emparejar el xaml y el código subyacente en el momento del diseño. Pero el proyecto compila y funciona.
Para un ejecutable wpf necesita hacer lo siguiente:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LanguageTargets>$(MSBuildExtensionsPath)/$(VisualStudioVersion)/Bin/Microsoft.CSharp.targets</LanguageTargets>
<TargetFramework>net451</TargetFramework>
<OutputType>WinExe</OutputType>
<RootNamespace>MyNamespace</RootNamespace>
<AssemblyName>MyExe</AssemblyName>
<ApplicationIcon>MyExe.ico</ApplicationIcon>
<ApplicationManifest>app.manifest</ApplicationManifest>
<StartupObject>MyNamespace.App</StartupObject>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System.Xaml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<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" />
<None Update="Properties/Settings.settings" Generator="SettingsSingleFileGenerator" LastGenOutput="Settings.Designer.cs" />
<Compile Update="Properties/Settings.Designer.cs" DesignTime="True" AutoGen="True" DependentUpon="Settings.settings" />
<Page Include="MainWindow.xaml" SubType="Designer" Generator="MSBuild:Compile" />
<Compile Update="MainWindow.xaml.cs" DependentUpon="MainWindow.xaml" />
<Resource Include="Images/*.png" />
<ApplicationDefinition Include="App.xaml" SubType="Designer" Generator="XamlIntelliSenseFileGenerator" />
<Compile Update="App.xaml.cs" DependentUpon="App.xaml" />
</ItemGroup>
<Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists(''$(MSBuildSDKExtrasTargets)'')" />
</Project>
13 de diciembre de 2018: se anunció .NET Core 3 Preview 1
.NET Core 3 admitirá aplicaciones WPF y WinForms. Puedes probarlo con la versión de vista previa de SDK:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
Respuesta anterior
Puede utilizar la siguiente plantilla para reemplazar .csproj antiguo con. Resuelve algunos problemas que otras personas tenían.
- No tiene que incluir archivos
*.g.cs
intermediarios como algunos sugieren hacer. - No se producirá un error
Main not found
. - No se
Unable to run your project. The "RunCommand" property is not defined.
Unable to run your project. The "RunCommand" property is not defined.
se producirá un error. - Incluye configuraciones y recursos predeterminados ya configurados.
Modelo:
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
<PropertyGroup>
<LanguageTargets>$(MSBuildExtensionsPath)/$(VisualStudioVersion)/Bin/Microsoft.CSharp.targets</LanguageTargets>
<TargetFramework>net47</TargetFramework>
<OutputType>WinExe</OutputType>
<StartupObject />
</PropertyGroup>
<PropertyGroup Condition="''$(Configuration)|$(Platform)''==''Debug|AnyCPU''">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<!-- App.xaml -->
<ApplicationDefinition Include="App.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</ApplicationDefinition>
<!-- XAML elements -->
<Page Include="**/*.xaml" Exclude="App.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</Page>
<Compile Update="**/*.xaml.cs" SubType="Code" DependentUpon="%(Filename)" />
<!-- Resources -->
<EmbeddedResource Update="Properties/Resources.resx" Generator="ResXFileCodeGenerator" LastGenOutput="Resources.Designer.cs" />
<Compile Update="Properties/Resources.Designer.cs" AutoGen="True" DependentUpon="Resources.resx" DesignTime="True" />
<!-- Settings -->
<None Update="Properties/Settings.settings" Generator="SettingsSingleFileGenerator" LastGenOutput="Settings.Designer.cs" />
<Compile Update="Properties/Settings.Designer.cs" AutoGen="True" DependentUpon="Settings.settings" />
</ItemGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System.Xaml" />
<Reference Include="WindowsBase" />
</ItemGroup>
</Project>
Hay Sunburst.NET.Sdk.WPF que permite usarlo como .NET SDK. Este es un ejemplo completo para la aplicación WPF donde se incluirán automáticamente los archivos .cs
y .xaml
:
<Project Sdk="Sunburst.NET.Sdk.WPF/1.0.47">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net40</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="../WpfMath/WpfMath.csproj" />
</ItemGroup>
</Project>
Cuando construyes este proyecto con msbuild
(aunque no tuve suerte con la dotnet build
), automáticamente descargará el SDK de NuGet y configurará todo.