在 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 中工作。
是否可以在设计模式下使用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 中工作。