gpt4 book ai didi

c# - 在 VS 可扩展性演练中,Guid 应包含 32 位数字和 4 个破折号 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

转载 作者:太空狗 更新时间:2023-10-30 01:35:54 30 4
gpt4 key购买 nike

我使用的是演练:第 1 部分 - 创建基本项目系统,完全按照网站 http://msdn.microsoft.com/en-us/library/cc512961.aspx 上的说明使用以及与从 http://mpfproj11.codeplex.com/ 下载的完全相同的项目托管包框架 .我已经在 Visual Studio 2013 中的多台开发机器上测试了演练。我还在 Visual Studio 2010 和 2012 中使用各自的 SDK 对此进行了测试。在每个测试中都会出现相同的问题。

问题:我收到异常 - mscorlib.dll 中发生类型为“System.FormatException”的异常,但未在用户代码中处理附加信息:Guid 应包含 32 位数字和 4 个破折号 (xxxxxxxx-xxxx-xxxx- xxxx-xxxxxxxxxxxx) 在 ProjectNode 类方法中:

private void SetProjectGuidFromProjectFile()
{
string projectGuid = this.GetProjectProperty(ProjectFileConstants.ProjectGuid);
if (String.IsNullOrEmpty(projectGuid))
{
this.projectIdGuid = Guid.NewGuid();
}
else
{
Guid guid = new Guid(projectGuid);
if (guid != this.projectIdGuid)
{
this.projectIdGuid = guid;
}
}
}

在线Guid guid = new Guid(projectGuid);

projectGuid 正在返回来自 <ProjectGuid>$guid1$</ProjectGuid> 的字符串“$guid1$”在 SimpleProject.myproj 中。

ProjectNode 类的 Load 方法中的断点表明

this.projectIdGuid = Guid.NewGuid();

返回一个新的 guid,例如 {6d4b8668-51ca-40eb-b013-9e7f96b82b68}。

在 ProjectNode 类的 Reload 方法中,方法 this.SetProjectGuidFromProjectFile()被解雇,然后如上所示抛出异常。如果我取出<ProjectGuid>$guid1$</ProjectGuid>在 SimpleProject.myproj 中,我无一异常(exception)地访问了该应用程序,但是您将没有与该应用程序相关联的 guid,如果尝试访问新创建的应用程序的属性页面,将会收到错误消息。 .myproj 可能没有正确注册?我花了一周时间通过各种博客和论坛研究这个主题。

最佳答案

问题来自 MPF(这是一段严重糟糕的代码 - 不幸的是,它是唯一可用的完整示例)实现自定义模板参数替换过程(此处描述的特定于 Visual Studio 的过程:http://msdn.microsoft.com/en-us/library/eehb4faa.aspx ) 仅支持替换所有项目(子)项,但不支持替换项目项本身。因此,您不能在 xxxx.myproj 文件中使用 $guid1$ 或任何其他 $thingy$。

如您所见,最简单的方法是删除此 $guid1$ 参数,并将其留空,因为 MPF 确实支持留空:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
...
<ProjectGuid></ProjectGuid>
...
</PropertyGroup>
...
</Project>

现在,与您的想法相反 :) 这很好用。这会设置 ProjectIDGuid ProjectNode 的属性。

您所追求的属性页完全不同。为简化起见,Visual Studio 将在您的层次结构中查询 __VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList 属性。默认情况下,MPF 是这样实现的:

    /// <summary>
/// List of Guids of the config independent property pages. It is called by the GetProperty for VSHPROPID_PropertyPagesCLSIDList property.
/// </summary>
/// <returns></returns>
protected virtual Guid[] GetConfigurationIndependentPropertyPages()
{
return new Guid[] { Guid.Empty };
}

Guid.Empty 是一个糟糕的选择(他们可以只发送一个空数组),因为它会引发以下错误,这很难用我们不知道它来自哪里的标准空 guid 来诊断:

enter image description here

因此,您需要做的是覆盖 GetConfigurationIndependentPropertyPages 并为其提供另一个 Guid,该 Guid 对应于派生自 SettingsPage 的类,等等。但那是另一回事了。

关于c# - 在 VS 可扩展性演练中,Guid 应包含 32 位数字和 4 个破折号 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959642/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com