VS 2015:带有Nuget-Packages的WPF项目模板

时间:2015-11-10 20:13:06

标签: c# wpf visual-studio-2015

我尝试使用ResourceDictionary,Window和一些NuGet-Packages创建一个小型WPF模板项目。 我找到了这本手册:https://shahbhavya47.wordpress.com/2015/03/11/create-visual-studio-project-template-with-pre-installed-nuget-packages-using-vs-sdk/

它工作得很好,但是一旦我添加WPF-UserControls,我就会遇到一些奇怪的行为:

  1. 如果我让XAML-Page Build到" Page",其他带有Build的类 "无"似乎编译失败,因为我有像Textmarks $ safeprojectname $ in there
  2. 即使我导出项目,模板内容部分的VSTemplate文件中也缺少XAML文件和代码隐藏类
  3. 如果我手动添加页面和代码隐藏文件并重建模板项目,则此文件不会显示在我使用它们创建的项目中的任何位置
  4. 我是否在这件事上做了一些可怕的错误,或者是否有一些指南专注于使用WPF的模板以及如何使用它们?

    提前致谢!

    的Matthias

1 个答案:

答案 0 :(得分:1)

以下是我如何运作的步骤:

  1. 创建了一个模板项目,向其添加了Newtonfost.Json包,并从解决方案资源管理器 .vstemplate 文件和 .csproj中删除了默认的Class1.cs 文件,如该手册中所述。
  2. .csproj 中的<OutputType>更改为 WinExe ,将<RequiredFrameworkVerison>更改为4.0
  3. 将以下行添加到 .csproj 的第一个<PropertyGroup>,以便VS可以将项目识别为WPF应用程序。
  4. <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    
    1. 添加了以下4个对 .csproj 文件的引用,以确保它在创建后立即编译:
    2. <Reference Include="System.Xaml">
        <RequiredTargetFramework>4.0</RequiredTargetFramework>
      </Reference>
      <Reference Include="WindowsBase" />
      <Reference Include="PresentationCore" />
      <Reference Include="PresentationFramework" />
      
      1. 将以下4个文件从标准的新WPF项目中复制: App.xaml,MainWindow.xaml,App.xaml.cs MainWindow.xaml.cs 模板项目。
      2. 在模板项目中,通过在解决方案资源管理器中选择每个文件并在属性中更改操作,为所有4个文件设置操作窗口。
      3. 将以下<ItemGroup>添加到 .csproj 文件中,以确保在从模板生成的项目中正确标记文件:
      4.   <ItemGroup>
            <ApplicationDefinition Include="App.xaml">
              <Generator>MSBuild:Compile</Generator>
              <SubType>Designer</SubType>
            </ApplicationDefinition>
            <Page Include="MainWindow.xaml">
              <Generator>MSBuild:Compile</Generator>
              <SubType>Designer</SubType>
            </Page>
            <Compile Include="App.xaml.cs">
              <DependentUpon>App.xaml</DependentUpon>
              <SubType>Code</SubType>
            </Compile>
            <Compile Include="MainWindow.xaml.cs">
              <DependentUpon>MainWindow.xaml</DependentUpon>
              <SubType>Code</SubType>
            </Compile>
          </ItemGroup>
        
        1. .vstemplate 文件中添加了相应的<ProjectItem>元素:
        2.   <ProjectItem ReplaceParameters="true" TargetFileName="App.xaml">App.xaml</ProjectItem>
            <ProjectItem ReplaceParameters="true" TargetFileName="MainWindow.xaml">MainWindow.xaml</ProjectItem>
            <ProjectItem ReplaceParameters="true" TargetFileName="App.xaml.cs">App.xaml.cs</ProjectItem>
            <ProjectItem ReplaceParameters="true" TargetFileName="MainWindow.xaml.cs">MainWindow.xaml.cs</ProjectItem>
          

          ReplaceParameters="true"可以将Textmarks包含在4个添加的文件中。我在App.xaml.cs中使用了$safeprojectname$

          public partial class App : Application
          {
              private string field = "$safeprojectname$";
          }
          

          并在MainWindow.xaml中:

          <Grid>
              <TextBlock>$safeprojectname$</TextBlock>
          </Grid>
          

          在此之后,构建模板项目会在bin / Debug文件夹中生成zip文件,该文件按预期工作,包括替换两个文件中的$safeprojectname$个实例。

          请记住,模板项目的主要目标是构建模板,因此,例如,从该项目打开 .xaml 文件将显示无效标记设计师。从普通的WPF项目开始,然后将其文件和 .csproj 文件的相关部分复制到模板项目中要容易得多。