我已经创建了一个插件...其中包括将c++项目添加到解决方案中。
在向包含c#或vb.net项目的解决方案中添加c++项目时,我遇到了一个问题(我将这些解决方案称为.Net解决方案)。
我相信你们都已经做到了--没有环境自动化。
将c++项目(具有支持的平台Win32和x64)添加到.NET解决方案中。查看配置管理器->因为.NET解决方案只有x86和x64,所以x64配置是正确的,但是在x86配置中,您将看到c++项目的不是Win32,而是x64!哦,是的,VS足够聪明,知道这是不会工作的,也不会选择这个配置来构建!
如果你是手工完成的,那么作为一个开发者,你应该足够聪明地去检查,好吗?但我正在尝试构建一个自动化来添加这个项目-这意味着,用户可能不知道这个bug,将构建解决方案-它将失败。
我尝试过更改平台--但它是只读的。
这是我到目前为止唯一发现的东西:
SolutionConfiguration config = solution.SolutionBuild.SolutionConfigurations.Item("Debug");
string msg = "";
foreach (SolutionContext context in config.SolutionContexts)
{
msg += context.ProjectName + context.ConfigurationName + context.PlatformName + context.ShouldBuild;
context.ConfigurationName = "Debug"; // I can modify this but I don't want to
if(context.PlatformName == "x64" && !context.ShouldBuild) // this must be the wrong platform
{
// I'd like to do that but it won't even compile
context.PlatformName == "Win32"; // <--- intellisense says error
context.ShouldBuild = true; // compiles but checkbox doesn't get set
}
}我曾经考虑过删除整个配置行,然后添加一个新的配置行--但是我不知道该怎么做……
我找到了"ConfigurationManager.DeleteConfigurationRow Method“,但它只删除了”调试“或”发布“配置...http://msdn.microsoft.com/en-us/library/ash2539k(v=vs.100).aspx
(我认为这不是我想要的-我只需要删除与特定平台相关的特定配置-或者,因为所有平台都被添加为x64,所以标记为"ShouldBuild = False“的平台或对应于x86解决方案配置的项目配置。如果我删除所有配置...那是行不通的,即使那样...我下一步要做什么?)
"ConfigurationManager.AddConfigurationRow Method“-没有指定平台...-那么假设我删除了该行,我如何正确地将其添加回来?
发布于 2013-06-11 07:58:28
现在,我正在修改sln文件-
它需要关闭解决方案,编辑文本文件,然后重新打开它。
这并不理想--如果有人能提出一个合适的解决方案,我将不胜感激。
发布于 2015-10-31 21:16:07
有一个解决方案可以解决这个问题,但只适用于VS2012和更高版本。从VS2012开始,您现在可以将EnvDTE.SolutionContext.ConfigurationName属性设置为" configuration | platform“形式,以便在解决方案配置中为给定项目设置目标配置和平台。
我在自己寻找这个问题的解决方案时找到了这个问题的答案。提供这个答案的原始来源是http://www.mztools.com/articles/2013/MZ2013014.aspx。你可以在那里找到一篇更长的文章和一个例子。
https://stackoverflow.com/questions/17029011
复制相似问题