【发布时间】:2019-07-19 15:48:04
【问题描述】:
我正在寻找一种方法来防止 Visual Studio 将项目属性更改反映到 *.csproj 文件中。我只想为单个构建操作设置属性,然后它们应该被丢弃。
我在我的 Visual Studio 插件中使用 EnvDTE 自动化对象。下面是我的示例代码,它将"UseHostCompilerIfAvailable" 属性设置(或更改)为"false",用于即将构建的项目的特定配置和平台。从 Visual Studio UI 启动构建。
在构建初始化过程中的某处,Visual Studio 将所有项目属性更改写入项目文件,这是我试图阻止的。
dte.Events.BuildEvents.OnBuildProjConfigBegin += BuildEvents_OnBuildProjConfigBegin;
...
private void BuildEvents_OnBuildProjConfigBegin(string Project, string ProjectConfig, string Platform, string SolutionConfig)
{
ThreadHelper.ThrowIfNotOnUIThread();
IVsSolution solution = (IVsSolution)this.GetService(typeof(SVsSolution));
solution.GetProjectOfUniqueName(Project, out IVsHierarchy hier);
IVsBuildPropertyStorage storage = hier as IVsBuildPropertyStorage;
storage.SetPropertyValue("UseHostCompilerIfAvailable", $"{ProjectConfig}|{Platform}", (uint)Microsoft.VisualStudio.Shell.Interop._PersistStorageType.PST_PROJECT_FILE, "false");
}
我知道我可以保存属性更改并在构建完成后恢复它们,或者我可以缓存项目文件并最终回滚它们,但这些方法可能会产生不良副作用。我什至会很高兴能得到一些我应该朝哪个方向看的想法。
【问题讨论】:
标签: c# visual-studio msbuild envdte