c# - ejemplos - wpf tutorial español




Cómo migrar proyectos Wpf al nuevo formato VS2017 (3)

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>

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.





visual-studio-2017