gpt4 book ai didi

c# - Visual Studio 扩展 - 设置 "Copy To Output Directory"属性

转载 作者:太空狗 更新时间:2023-10-29 23:05:29 26 4
gpt4 key购买 nike

我正在创建一个 VS 扩展,我想将一个文件添加到解决方案并设置一些属性。其中之一是 Copy to output directory,但我找不到设置它的方法。设置 Build action 工作正常,但在调试时所需的属性甚至没有列在数组中。

private EnvDTE.ProjectItem AddFileToSolution(string filePath)
{
var folder = CurrentProject.ProjectItems.AddFolder(Path.GetDirectoryName(filePath));
var item = folder.ProjectItems.AddFromFileCopy(filePath);

item.Properties.Item("BuildAction").Value = "None";
// item.Properties.Item("CopyToOutputDirectory").Value = "CopyAlways"; // doesn't work - the dictionary doesn't contain this item, so it throws an exception

return item;
}

如何为新添加的项目设置属性?

最佳答案

对于 C# 或 VB 项目,Cole Wu - MSFT 的答案应该有效。

如果您尝试为不同类型的项目做同样的事情,那么您可能就不走运了,因为每个项目类型都有不同的属性。

根据我的尝试:

  • C#和VB有23个属性,包括“CopyToOutputDirectory”
  • F# 有 9 个属性,包括“CopyToOutputDirectory”
  • Node.js 有 13 个属性,缺少“CopyToOutputDirectory”

查看您要修改的项目中文件的属性窗口。它是否包含“CopyToOutputDirectory”属性?如果不是,则此属性可能不可用。

编辑:

设置 ProjectItem 属性的另一个选项是通过它的属性(在 *.csproj 中修改它)。我会说这是解决方法,而不是真正的解决方案,因为您之后需要重新加载项目。

private EnvDTE.ProjectItem AddFileToSolution(string filePath)
{
var folder = CurrentProject.ProjectItems.AddFolder(Path.GetDirectoryName(filePath));
var item = folder.ProjectItems.AddFromFileCopy(filePath);

item.Properties.Item("BuildAction").Value = "None";

// Setting attribute instead of property, becase property is not available
SetProjectItemPropertyAsAttribute(CurrentProject, item, "CopyToOutputDirectory", "Always");

// Reload project

return item;
}

private void SetProjectItemPropertyAsAttribute(Project project, ProjectItem projectItem, string attributeName,
string attributeValue)
{
IVsHierarchy hierarchy;
((IVsSolution)Package.GetGlobalService(typeof(SVsSolution)))
.GetProjectOfUniqueName(project.UniqueName, out hierarchy);

IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage;

if (buildPropertyStorage != null)
{
string fullPath = (string)projectItem.Properties.Item("FullPath").Value;

uint itemId;
hierarchy.ParseCanonicalName(fullPath, out itemId);

buildPropertyStorage.SetItemAttribute(itemId, attributeName, attributeValue);
}
}

关于c# - Visual Studio 扩展 - 设置 "Copy To Output Directory"属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com