【发布时间】:2014-06-10 18:37:12
【问题描述】:
我正在使用 演练:第 1 部分 - 创建基本项目系统,完全按照网站 http://msdn.microsoft.com/en-us/library/cc512961.aspx 和 Managed Package Framework for Projects 中的说明 与从http://mpfproj11.codeplex.com/ 下载的完全相同。我已经在 Visual Studio 2013 中的多台开发机器上测试了演练。我还在 Visual Studio 2010 和 2012 中使用它们各自的 SDK 进行了测试。在每个测试中都会出现相同的问题。
问题:我收到异常 - mscorlib.dll 中出现“System.FormatException”类型的异常,但未在用户代码中处理其他信息:Guid 应包含 32 位数字和 4 个破折号(xxxxxxxx-xxxx-xxxx- ProjectNode类方法中的xxxx-xxxxxxxxxxxx):
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 正在返回来自 SimpleProject.myproj 中 <ProjectGuid>$guid1$</ProjectGuid> 的字符串“$guid1$”。
ProjectNode类的Load方法中的断点表明
this.projectIdGuid = Guid.NewGuid();
返回一个新的 guid,例如 {6d4b8668-51ca-40eb-b013-9e7f96b82b68}。
在 ProjectNode 类的 Reload 方法中,方法 this.SetProjectGuidFromProjectFile() 被触发,然后抛出异常,如上所示。如果我在 SimpleProject.myproj 中取出 <ProjectGuid>$guid1$</ProjectGuid>,我会毫无例外地进入应用程序,但您将没有与应用程序关联的 guid,并且如果尝试访问新创建的应用程序的属性页面,则会收到错误消息。 .myproj 可能没有正确注册?我花了一周时间通过各种博客和论坛研究这个主题。
【问题讨论】:
-
你必须硬编码,不是吗?
-
$guid1$必须在代码中的其他位置自动或手动替换为真实的 GUID。 -
据我了解,$guid1$ 应该用新创建的 guid 的就地代码替换。例如,如果我将 .myproj 更改为 .csproj,则 $guid1$ 将替换为新创建的 guid。但是,program.cs 中的 $namespace$ 和 $class$ 不会被替换。本演练的部分目的是创建和注册您自己的项目类型。在演练中它是 .myproj。如果我将 guid 硬编码到 SimpleProject.myproj 中,那么从此项目类型创建的每个项目都将具有相同的应用程序 guid。
-
每期请提出一个问题。并请说明你问的是什么问题。这样的问题不适合。
-
根据您的要求删除了第 2 期。将仅在单独的 postm 上与问题 2 重复问题
标签: c# visual-studio vsx