将文件添加到项目C#

时间:2018-08-16 13:53:12

标签: c# visual-studio-extensions visual-studio-addins

在我的Visual Studio加载项中,我想在运行时在当前项目的Properties文件夹中添加一个XML文件。

使用以下代码,文件会在重新加载项目后显示……到目前为止很好

new XDocument(new XElement("Settings",
                     new XElement("Blabla",
                         new XElement("SomeSetting", value),
                 )
             ))
             .Save(Path.Combine(GetProjectPropertiesPath(), FileName));

var project = new Project(GetProjectPath());
project.ReevaluateIfNecessary();

if (project.Items.FirstOrDefault(i => i.EvaluatedInclude == Path.Combine(GetProjectPropertiesPath(), FileName)) == null)
{
    project.AddItem("Content", Path.Combine(GetProjectPropertiesPath(), FileName));
}

project.Save();

项目类位于Microsoft.Build.Evaluation名称空间中。

Reload Project Message

XML-File appears

我的问题: 首先,我希望添加的文件在不重新加载项目的情况下显示出来……我在几个NuGet-Pakages或Extensions中看到这是必须的。 其次,团队基础服务器无法识别添加的文件,而必须手动将其添加到源代码管理中。文件不应自动检入。

有人有想法,如何解决? 非常感谢你!

2 个答案:

答案 0 :(得分:0)

  

将文件添加到项目c#

是的,您可以在运行时使用nuget包将此XML文件添加到当前项目的Properties文件夹中。

有关更多详细信息,请参见Creating NuGet packages

以下是我的测试.nuspec

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyTestPackager</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="Test.xml" target="content\Properties\Test.xml" />
  </files>
</package>

然后创建nuget包,并将此包添加到项目中,XML文件将添加到Properties文件夹中:

enter image description here

通过这种方式,XML文件添加到项目中,您可以从解决方案资源管理器中对其进行检查。

此外,该XML文件将被团队基础服务器识别,我们可以将其添加到源控件中。

答案 1 :(得分:0)

@Leo Liu-MSFT ...感谢您提出建议的解决方案,但不幸的是,这不是我想要解决的方法。

对于那些感兴趣的人,我现在已经解决了这个问题:

    private static void AddXmlFileToProject(string tempPath)
    {
        try
        {
            var project = GetProject();
            foreach (EnvDTE.ProjectItem projectItem in project.ProjectItems)
            {
                if (projectItem.Name == "Properties")
                {
                    foreach (EnvDTE.ProjectItem item in projectItem.ProjectItems)
                    {
                        if (item.Name == FileName)
                        {
                            EditExistingFile(item);
                            return;
                        }
                    }

                    projectItem.ProjectItems.AddFromFileCopy(tempPath);
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private static void EditExistingFile(EnvDTE.ProjectItem projectItem)
    {
        try
        {
            projectItem.Open();

            var textSelection = (TextSelection)projectItem.Document.Selection;
            projectItem.Document.ReadOnly = false;

            textSelection.SelectAll();
            textSelection.Text = //new XML Content here

            projectItem.Document.Save();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

因此您可以在不重新加载的情况下将文件添加到项目中,并且可以通过源代码控制对其进行识别,如您在此处看到的那样:

Solution video

我希望它可以帮助其他人