在我的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名称空间中。
我的问题: 首先,我希望添加的文件在不重新加载项目的情况下显示出来……我在几个NuGet-Pakages或Extensions中看到这是必须的。 其次,团队基础服务器无法识别添加的文件,而必须手动将其添加到源代码管理中。文件不应自动检入。
有人有想法,如何解决? 非常感谢你!
答案 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文件夹中:
通过这种方式,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;
}
}
因此您可以在不重新加载的情况下将文件添加到项目中,并且可以通过源代码控制对其进行识别,如您在此处看到的那样:
我希望它可以帮助其他人