在 C# 中的设计时读取项目的目标平台

Read the project's target platform during design time in C#

是否可以在设计模式下使用C#编程语言检测winform项目的目标平台是否设置为AnyCPU?

例如,创建一个按钮控件,单击该按钮控件将确定项目的目标平台是设置为 AnyCPU、x86 还是 x64?

这应该在设计模式下由托管控件检测到,例如单击按钮确定正在使用它的项目的目标平台。

使用的语言是C#。

  if (IntPtr.Size != 8)
  {
    //64-bit process.
  }


  if (IntPtr.Size != 4)
  {
   //32-bit process
  }

您可以添加对 EnvDTE 的引用并将这样的 属性 添加到您的控件中:

[EditorBrowsable(EditorBrowsableState.Never)]
public string TargetPlatform
{
    get
    {
        if (!DesignMode)
            return null;

        var host = (IDesignerHost)Site.GetService(typeof(IDesignerHost));
        var dte = (EnvDTE.DTE)host.GetService(typeof(EnvDTE.DTE));
        var project = dte.ActiveSolutionProjects[0];
        return project.ConfigurationManager.ActiveConfiguration.Properties
                      .Item("PlatformTarget").Value;
    }
}

注意:答案是展示解决方案有效的 PoC。对于现实世界的场景,它应该只是设计时 属性 单独程序集中控件的设计者。那么您就不需要分发额外的程序集了。

此外,[Designer] 属性应该使用类型的名称而不是类型本身。这与 windows 表单设计师的工作方式相同。您不需要随应用程序一起分发额外的设计时程序集,但是作为控件安装程序的 nuget 包或 VSIX 的一部分,它们应该分发以在 VS 中工作。