将文件添加到项目 C#

Add file to project c#

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

使用以下代码,文件在重新加载项目后出现...到目前为止一切顺利

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();

项目-Class 在命名空间 Microsoft.Build.Evaluation 中。

Reload Project Message

XML-File appears

我的问题: 首先,我希望在不重新加载项目的情况下显示添加的文件...我在几个 NuGet-Pakages 或扩展中看到这一定是可能的。 其次,添加的文件无法被 team Foundation 服务器识别,必须手动添加到源代码管理中...该文件不应自动签入。

有没有人知道如何解决这个问题? 非常感谢!

Add file to project c#

是的,你可以使用nuget包在运行-时间在当前项目的Properties文件夹中添加这个XML-文件。

有关更多详细信息,请参阅 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 文件夹中:

通过这种方式,XML-文件添加到项目中,您可以从解决方案资源管理器中查看它。

另外,这个XML文件会被team foundation服务器识别,我们可以将它添加到源代码管理中。

@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

希望对其他人有所帮助