在Visual外接程序中,我想在运行时在当前项目的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();Project位于命名空间Microsoft.Build.Evaluation中。
我的问题是:首先,我希望添加的文件在不重新加载项目的情况下显示.我在几个NuGet或扩展中看到这是可能的。其次,添加的文件不能被服务器识别,必须手动添加到源代码管理中.文件不应自动签入。
有谁有办法解决这个问题吗?非常感谢!
发布于 2018-08-21 12:48:00
@刘利奥-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;
}
}因此,该文件在不需要重新加载的情况下被添加到项目中,源代码管理可以识别该文件,如您在这里所看到的:
我希望这对其他人有帮助
发布于 2018-08-17 05:56:26
将文件添加到项目c#
是的,您可以在运行时使用nuget包在当前项目的Properties文件夹中添加此XML。
有关更多细节,请参见创建NuGet包。
下面是我的测试.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-File将添加到Properties文件夹中:

通过这种方式,XML文件添加到项目中,您可以从解决方案资源管理器中检查它。
此外,这个XML文件将被服务器识别,我们可以将它添加到源代码管理中。
https://stackoverflow.com/questions/51878766
复制相似问题