簡體   English   中英

VS 2015:帶有 Nuget 包的 WPF 項目模板

[英]VS 2015: WPF Project Template with Nuget-Packages

我正在嘗試創建一個帶有 ResourceDictionary、一個窗口和一些 NuGet 包的小型 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 頁面構建為“頁面”,其他構建為“無”的類似乎會被編譯並失敗,因為我在那里有像 $safeprojectname$ 這樣的文本標記
  2. 即使我導出項目,XAML 文件和代碼隱藏類在 TemplateContent-Section 的 VSTemplate 文件中也丟失
  3. 如果我手動添加頁面和代碼隱藏文件並重建模板項目,則此文件不會顯示在我用它們創建的項目中的任何位置

我在這件事上做錯了什么,還是有一些指南圍繞 WPF 模板以及如何使用它們?

提前致謝!

馬蒂亞斯

這是我如何讓它工作的步驟:

  1. 創建了一個模板項目,向其中添加了 Newtonfost.Json 包,並從解決方案資源管理器.vstemplate文件和.csproj文件中刪除了默認的 Class1.cs,如該手冊中所述。
  2. .csproj中的<OutputType>更改為WinExe ,將<RequiredFrameworkVerison>更改為 4.0
  3. 將以下行添加到.csproj的第一個<PropertyGroup> ,以便 VS 可以將項目識別為 WPF 應用程序。
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
  1. 添加了以下 4 個對.csproj文件的引用,以確保它在創建后立即編譯:
<Reference Include="System.Xaml">
  <RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
  1. 從標准的新 WPF 項目中復制以下 4 個文件: App.xaml、MainWindow.xaml、App.xaml.csMainWindow.xaml.cs到模板項目中。
  2. 在模板項目中,通過在解決方案資源管理器中選擇每個文件並在屬性窗口中更改操作,將所有 4 個文件的操作設置為
  3. 將以下<ItemGroup>添加到.csproj文件以確保文件在從模板生成的項目中正確標記:
  <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. 將相應的<ProjectItem>元素添加到.vstemplate文件中:
  <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"可以將文本標記包含到 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文件的相關部分復制到模板項目中要容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM