我正在编写一个VSIX包,使用户能够批量编辑当前加载解决方案中所有活动配置的项目的OutputPath属性(请参见极其烦人的第4步这里)。
我遇到了一个非常具体的问题:当将属性设置为包含宏的值时(例如"$(SolutionDir)\bin\Debug"
),写入.csproj的值会被转义如下:
<OutputPath>%24%28SolutionDir%29\bin\Debug\</OutputPath>
与其让MSBuild扩展宏,不如创建一个实际的物理文件夹,并将其命名为$(SolutionDir)
。我想以某种方式绕过这个转义。
MSDN文档在这一领域显然缺乏。
我的初始代码如下:
private void MenuItemCallback(object sender, EventArgs e)
{
SolutionWideOutputDialogWindow dialog = new SolutionWideOutputDialogWindow();
dialog.ShowModal();
if (!dialog.DialogResult.HasValue || !dialog.DialogResult.Value)
{
return;
}
string requestedOutputPath = dialog.outputPathTextBox.Text;
Solution2 solution = _dte2.Solution as Solution2;
if (solution == null)
{
return;
}
Projects projects = solution.Projects;
foreach (Project project in projects)
{
Property outputPath = project.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath");
outputPath.Value = requestedOutputPath;
project.Save();
}
}
非常感谢任何人的帮助。
$(VCTargetsPath)\Platforms\Win32\ImportBefore
中)。在全局文件中设置 OutputPath,然后就完成了。我真的建议使用一个通用文件来定义几乎所有内容(编译器/链接器/工具选项和所有路径),这毕竟是DRY的问题。 - stijn