将文件添加到项目 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
希望对其他人有所帮助
在我的 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
希望对其他人有所帮助