Visual Studio 2012/2013에 대한 사용자 지정 언어 서비스를 만들려고합니다 (이 두 가지 차이점은별로 없을 것 같습니다) . 사용자 지정 언어 서비스는 아직 Visual Studio에 통합되지 않은 컴파일러 용입니다. 내 사용자 지정 프로젝트 형식에 대한 Visual Studio 패키지를 만들어 시작했습니다. 모두 잘 작동하지만 Visual Studio에서 새 프로젝트를 만들면 충돌이 발생합니다. 때로는 Visual Studio를 닫을 때만 중단됩니다. 나는 항상 문제에 대한 다른 힌트가없는 COMException을 얻는다. 내 Visual Studio 패키지에는 문제가 없지만 내 사용자 지정 프로젝트 파일에는 문제가 없다고 생각합니다. 그것은 MSBUILD를 사용할 때 좋지만 Visual Studio는 어떤 이유로 든 그것을 좋아하지 않습니다. 나는 같은 문제를 가진 다른 사람들이 있고 그것이 항상 커스텀 프로젝트 파일과 관련이 있다고 들었다. 불행히도 그 주제에 대한 문서는 거의 없습니다.새 사용자 지정 프로젝트 유형을 만들거나 닫을 때 Visual Studio 2012/2013이 충돌 함
내 패키지 구현하는 MPF의 ProjectPackage
을 사용하고 있습니다 :
[ProvideProjectFactory(typeof(MyProjectFactory), null, "My Project Files (*.myproj);*.myproj", "myproj", "myproj", @"Templates\Projects", LanguageVsTemplate = "My Project")]
[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
[Guid(GuidList.ProjectPackageGuidString)]
public sealed class MyProjectPackage : ProjectPackage
{
public MyProjectPackage()
{
Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString()));
}
protected override void Initialize()
{
base.Initialize();
this.RegisterProjectFactory(new MyProjectFactory(this));
}
public override string ProductUserContext
{
get { return string.Empty; }
}
}
이 내 프로젝트의 공장 모습입니다 같은 :
[Guid(GuidList.ProjectFactoryGuidString)]
public class MyProjectFactory : ProjectFactory
{
public MyProjectFactory(Package package)
: base(package)
{
this.package = package;
}
private Package package;
protected override ProjectNode CreateProject()
{
MyProjectNode project = new MyProjectNode(this.package);
project.SetSite((IOleServiceProvider)((IServiceProvider)this.package).GetService(typeof(IOleServiceProvider)));
return project;
}
}
그리고 이것은 내 사용자 지정 프로젝트 노드 :
public class MyProjectNode : ProjectNode
{
public MyProjectNode(Package package)
{
this.package = package;
}
private Package package;
public override Guid ProjectGuid
{
get { return new Guid(GuidList.ProjectFactoryGuidString); }
}
public override string ProjectType
{
get { return "My Project"; }
}
public override void AddFileFromTemplate(string source, string target)
{
this.FileTemplateProcessor.AddReplace("$Title$", Path.GetFileNameWithoutExtension(target));
this.FileTemplateProcessor.UntokenFile(source, target);
this.FileTemplateProcessor.Reset();
}
}
그리고 내 맞춤 프로젝트 파일입니다. 나는 문제를 찾기 위해 최소한에 아래로 제거하지만 도움이되지 않았다 :
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>454501B3-90E2-4735-ABDF-27B77BEBFD7A</ProjectGuid>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.my" />
</ItemGroup>
<Target Name="Build">
<Message Text="Hello, World!" />
</Target>
</Project>
는 사람이 경험이 있습니까? IronPython과 IronRuby Visual Studio 통합 소스 코드를 살펴 봤지만 너무 복잡합니다.
Visual Studio를 디버그하여 충돌 원점을 확인할 수 있습니다. –
네,하지만 문제는 더 이상의 정보가없는 COMException 만 발생한다는 것입니다. Visual Studio 플러그인을 만드는 데 익숙하지 않아 3 일간의 연구가 끝난 후에도 해결책을 찾지 못했습니다. – David
VS 개발은 실제로 어렵습니다 :-) 첫 번째 기회를 포함하여 모든 예외를 잡아야하므로 스택 프레임을 얻을 수 있습니다. 여기를 참조하십시오 : http://stackoverflow.com/questions/8218249/how-do-i-enable-visual-studio-2010-to-break-when-a-first-chance-exception-happen –