Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建VisualStudio模板_C#_Visual Studio_Templates - Fatal编程技术网

C# 创建VisualStudio模板

C# 创建VisualStudio模板,c#,visual-studio,templates,C#,Visual Studio,Templates,我希望创建一个VisualStudio2008模板,该模板将创建一个基本项目,并基于用户输入的选项删除某些文件/文件夹 现在,我已经在线学习了一些教程,这些教程让我创建表单来查询用户并将数据传递到IWizard类中,但我不知道从那里可以做什么 这些教程提供了一个示例来进行一些简单的替换: 代码: Form1 form=new Form1(); DialogResult dlg=form.ShowDialog(); if(dlg==DialogResult.OK) { foreach(form.P

我希望创建一个VisualStudio2008模板,该模板将创建一个基本项目,并基于用户输入的选项删除某些文件/文件夹

现在,我已经在线学习了一些教程,这些教程让我创建表单来查询用户并将数据传递到IWizard类中,但我不知道从那里可以做什么

这些教程提供了一个示例来进行一些简单的替换: 代码:

Form1 form=new Form1();
DialogResult dlg=form.ShowDialog();
if(dlg==DialogResult.OK)
{
foreach(form.Parameters中的KeyValuePair对)
{
如果(!replacementsDictionary.ContainsKey(pair.Key))
replacementsDictionary.Add(pair.Key,pair.Value);
其他的
replacementsDictionary[pair.Key]=pair.Value;
}
}
form.Close();
但是我希望根据用户设置有选择地包括文件,如果可能的话,根据设置有选择地包括文件中的代码部分


有没有一种聪明的方法可以做到这一点,或者我必须手动删除IWizard:projectFinishedGeneration()中的项目文件?

如果我理解正确,您希望能够确定是否应该将项目项添加到项目中


如果是这样,您可以实现IWizard.ShouldAddProjectItem并返回是否要添加该文件。

根据我的经验,
ShouldAddProjectItem
仅对模板项目中的文件夹调用。因此,它几乎毫无用处

相反,您需要将代码放入
ProjectFinishedGenerating
实现中,该实现使用VSAPI删除项目项

在其中,您可以删除以下项目:

ProjectItem file = project.ProjectItems.Item("File.cs");
file.Remove();

通过使用带有替换项的
$if$
,可以有选择地包括文件的某些部分。例如,请参见默认C#类库模板中的此位:

<ItemGroup>
    <Reference Include="System"/>
    $if$ ($targetframeworkversion$ >= 3.5)
    <Reference Include="System.Core"/>
    <Reference Include="System.Xml.Linq"/>
    <Reference Include="System.Data.DataSetExtensions"/>
    $endif$

$if$($targetframeworkversion$>=3.5)
$endif$

…等等。

这非常有用,但我也想知道是否可以根据设置选择性地包含文件的某些部分。你在这里给出的答案很好。非常感谢。
<ItemGroup>
    <Reference Include="System"/>
    $if$ ($targetframeworkversion$ >= 3.5)
    <Reference Include="System.Core"/>
    <Reference Include="System.Xml.Linq"/>
    <Reference Include="System.Data.DataSetExtensions"/>
    $endif$