首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件添加到项目c#

将文件添加到项目c#
EN

Stack Overflow用户
提问于 2018-08-16 13:53:11
回答 2查看 4.3K关注 0票数 0

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

使用以下代码,该文件将在重新加载项目后显示.到目前一切尚好

代码语言:javascript
复制
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();

Project位于命名空间Microsoft.Build.Evaluation中。

重新加载项目消息

XML-文件显示

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

有谁有办法解决这个问题吗?非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-21 12:48:00

@刘利奥-MSFT.谢谢你提出的解决方案,但不幸的是,这不是我想要解决的方法。

对于那些有兴趣的人,我现在已经这样解决了:

代码语言:javascript
复制
    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;
        }
    }

因此,该文件在不需要重新加载的情况下被添加到项目中,源代码管理可以识别该文件,如您在这里所看到的:

解决方案视频

我希望这对其他人有帮助

票数 1
EN

Stack Overflow用户

发布于 2018-08-17 05:56:26

将文件添加到项目c#

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

有关更多细节,请参见创建NuGet包

下面是我的测试.nuspec

代码语言:javascript
复制
<?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-File将添加到Properties文件夹中:

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51878766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档