有没有办法添加'导入'到VS扩展中的项目?

时间:2014-08-25 10:33:34

标签: visual-studio-2013 visual-studio-extensions

当我检测到已将特定类型的文件添加到项目中时,我想向项目添加新的<Import>。 (<Import>向构建过程添加一个任务,该过程接收文件并在构建期间执行工作。

(使用IVsSolutionEvents.HandleItemAdded检测已添加到项目中的文件。)

我目前有代码使用Microsoft.Build.Evaluation.Project将Import元素添加到项目中。但是,这是对磁盘上项目文件的编辑。如果我在检测到项目添加新项目后使用此代码添加导入我在磁盘更改(新导入)和内存中更改(添加新文件)之间创建冲突)即可。然后向用户呈现一个对话框,他们必须选择要丢弃的更改。

我的问题是:

是否有办法通过visual studio可扩展性API向项目中添加新的<Import>,以便对项目的修改将是内存中的#34;添加新项目项目与添加Import?

之间存在冲突

1 个答案:

答案 0 :(得分:1)

对于现有项目类型,我发现最简单的方法是利用NuGet。您可以在特殊的构建/ 文件夹中定义一个包含 .targets 文件的NuGet包,当NuGet添加到Visual中的项目时,它将automatically add the <Import>工作室。如果您将来升级包,它也会更新引用。一个完整的示例是Antlr4BuildTasks包的打包,该包当前使用以下 .nuspec 文件来创建包。这里的关键是<!-- Build Configuration -->评论之后的部分。

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata minClientVersion="2.7">
    <id>Antlr4</id>
    <version>0.0.0</version>
    <authors>Sam Harwell, Terence Parr</authors>
    <owners>Sam Harwell</owners>
    <description>The C# target of the ANTLR 4 parser generator for Visual Studio 2010+ projects. This package supports projects targeting .NET 2.0 or newer, and built using Visual Studio 2010 or newer.</description>
    <language>en-us</language>
    <projectUrl>https://github.com/sharwell/antlr4cs</projectUrl>
    <licenseUrl>https://raw.github.com/sharwell/antlr4cs/master/LICENSE.txt</licenseUrl>
    <iconUrl>https://raw.github.com/antlr/website-antlr4/master/images/icons/antlr.png</iconUrl>
    <copyright>Copyright © Sam Harwell 2014</copyright>
    <releaseNotes>https://github.com/sharwell/antlr4cs/releases/v$version$</releaseNotes>
    <requireLicenseAcceptance>true</requireLicenseAcceptance>
    <developmentDependency>true</developmentDependency>
    <tags>antlr antlr4 parsing</tags>
    <title>ANTLR 4</title>
    <summary>The C# target of the ANTLR 4 parser generator for Visual Studio 2010+ projects.</summary>
    <dependencies>
      <dependency id="Antlr4.Runtime" version="$version$" />
    </dependencies>
  </metadata>
  <files>
    <!-- Tools -->

    <file src="..\tool\target\antlr4-csharp-$CSharpToolVersion$-complete.jar" target="tools"/>

    <!-- Build Configuration -->

    <file src="..\runtime\CSharp\Antlr4BuildTasks\bin\net40\$Configuration$\Antlr4.net40.props" target="build\Antlr4.props"/>
    <file src="..\runtime\CSharp\Antlr4BuildTasks\bin\net40\$Configuration$\Antlr4.net40.targets" target="build\Antlr4.targets"/>
    <file src="..\runtime\CSharp\Antlr4BuildTasks\bin\net40\$Configuration$\Antlr4BuildTasks.net40.dll" target="build"/>
  </files>
</package>