3

我创建了一个加载项......除此之外,将一个 c++ 项目添加到解决方案中。

我在将 c++ 项目添加到包含 c# 或 vb.net 项目的解决方案时遇到问题(我将这些解决方案称为 dot net 解决方案)。

我相信你们都做到了——没有 envdte 自动化。

将 c++ 项目(支持 Win32 和 x64 平台)添加到点网解决方案。查看配置管理器 -> 由于 dot net 解决方案只有 x86 和 x64,x64 配置是正确的,但是在 x86 配置中您将看到 c++ 项目的不是 Win32 - 您将看到 x64 !!!!哦,是的,VS 很聪明,知道这行不通,也没有选择这个配置来构建!!!!

如果您是手动执行此操作,那么您作为开发人员应该足够聪明,可以进行检查,好的。但是我正在尝试构建一个自动化来添加这个项目——这意味着,用户可能不知道这个错误,将构建解决方案——它会失败。

我试图改变平台 - 但它是只读的。

这是我迄今为止发现的唯一东西:

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" - 没有什么可以指定平台... - 所以假设我删除了该行,我该如何正确添加它?

4

2 回答 2

0

现在,我正在修改 sln 文件 -

它需要关闭解决方案,编辑文本文件,然后重新打开它。

这并不理想 - 如果有人可以提出适当的解决方案,我将不胜感激。

于 2013-06-10T23:58:27.543 回答
0

有一个解决方案,但仅适用于 VS2012 及更高版本。从 VS2012 开始,您现在可以将 EnvDTE.SolutionContext.ConfigurationName 属性设置为“配置|平台”形式,以在解决方案配置中为给定项目设置目标配置和平台。

我自己在寻找这个问题的解决方案时找到了这个问题的答案。提供此答案的原始来源位于http://www.mztools.com/articles/2013/MZ2013014.aspx。您会在此处找到更长的文章和示例。

于 2015-10-31T13:16:06.710 回答