Mark_G00 Ответов: 1

Исключение при загрузке шаблона проекта VSTA VB


Всем Привет

Я хотел бы использовать VSTA для VS2017 для нескольких моих проектов. Я никогда ничего не делал с ним до того, как начал с документа "VSTA Sample Host Integration.docx - который я нашел в папке Microsoft SDK. Я мог бы создать первое приложение на C#, и оно работает. Я мог бы реализовать свои собственные функции и объекты, и пока это выглядит хорошо. Все примеры в документации приведены на языке C#, но там говорится, что можно использовать и VB. План состоял в том, чтобы переключиться на VB, как только я получу C# для запуска.Я перевел все на VB и могу открыть IDE, но загрузка проекта выбрасывает "систему.Исключение"

Imports Microsoft.VisualStudio.Tools.Applications
Imports System.IO
Imports System.Reflection

Private _session As Session
    Private _project As Project

Public Sub OpenIDE()
        If IsNothing(_session) = True Then

            Dim sessionMgr As SessionManager = SessionManager.Create("MyHostApp")

            _session = sessionMgr.CreateSession()

        End If

        _session.Ide.Show()
    End Sub


Public Sub NewVSTAProject()
        If (IsNothing(_session) = True) Or (IsNothing(_project) = False) Then
            'Error handling
            Exit Sub
        End If

        Dim storageCS As IProjectStorage = ProjectStorage.CreateStorageFromTemplate("templateCS.vstax", "csaddin", "VSTASampleCS", Nothing)
        Dim storageVB As IProjectStorage = ProjectStorage.CreateStorageFromTemplate("templateVB.vstax", "vbaddin", "VSTASampleVB", Nothing)

        
        _project = _session.LoadProject(storageVB)     <-----Exception
        _project = _session.LoadProject(storageCS)
       

    End Sub


Что я уже пробовал:

Я использовал документацию и мог успешно создавать

-Файл с шаблоном# вста
-приложение, которое открывает IDE и запускает скрипт на языке Си#


Я сделал все шаги в документации и перевел их на VB. GUID в TemplateProject имеет значение VB. Пожалуйста, смотрите файлы проекта ниже.

: Проектшаблона.vbproj
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{$guid1$}</ProjectGuid>
    <OutputType>Library</OutputType>
    <RootNamespace>$safeprojectname$</RootNamespace>
    <AssemblyName>$safeprojectname$</AssemblyName>
    <FileAlignment>512</FileAlignment>
    <MyType>Windows</MyType>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
	<ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <OutputPath>bin\Debug\</OutputPath>
    <DocumentationFile>$safeprojectname$.xml</DocumentationFile>
    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DocumentationFile>$safeprojectname$.xml</DocumentationFile>
    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
    <ProjectTypeGuids>{30D016F9-3734-4E33-A861-5E7D899E18F3};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
  </PropertyGroup>
  <PropertyGroup>
    <OptionExplicit>On</OptionExplicit>
  </PropertyGroup>
  <PropertyGroup>
    <OptionCompare>Binary</OptionCompare>
  </PropertyGroup>
  <PropertyGroup>
    <OptionStrict>Off</OptionStrict>
  </PropertyGroup>
  <PropertyGroup>
    <OptionInfer>On</OptionInfer>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="System.Net.Http" />
  </ItemGroup>
  <ItemGroup>
    <Import Include="Microsoft.VisualBasic" />
    <Import Include="System" />
    <Import Include="System.Collections" />
    <Import Include="System.Collections.Generic" />
    <Import Include="System.Data" />
    <Import Include="System.Diagnostics" />
    <Import Include="System.Linq" />
    <Import Include="System.Xml.Linq" />
    <Import Include="System.Threading.Tasks" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="AddIN.vb" />
    <Compile Include="My Project\AssemblyInfo.vb" />
    <Compile Include="My Project\Application.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Application.myapp</DependentUpon>
    </Compile>
    <Compile Include="My Project\Resources.Designer.vb">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>Resources.resx</DependentUpon>
    </Compile>
    <Compile Include="My Project\Settings.Designer.vb">
      <AutoGen>True</AutoGen>
      <DependentUpon>Settings.settings</DependentUpon>
      <DesignTimeSharedInput>True</DesignTimeSharedInput>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="My Project\Resources.resx">
      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
      <CustomToolNamespace>My.Resources</CustomToolNamespace>
      <SubType>Designer</SubType>
    </EmbeddedResource>
  </ItemGroup>
  <ItemGroup>
    <None Include="My Project\Application.myapp">
      <Generator>MyApplicationCodeGenerator</Generator>
      <LastGenOutput>Application.Designer.vb</LastGenOutput>
    </None>
    <None Include="My Project\Settings.settings">
      <Generator>SettingsSingleFileGenerator</Generator>
      <CustomToolNamespace>My</CustomToolNamespace>
      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
    </None>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{30D016F9-3734-4E33-A861-5E7D899E18F3}">
        <ProjectProperties HostName="MyHostApp" HostPackage="{B3A685AA-7EAF-4BC6-9940-57959FA5AC07}" ApplicationType="" Language="vb" TemplatesPath="" />
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
</Project>


manifestVB.xml
<?xml version="1.0" encoding="utf-8" ?>
<VstaTemplates xmlns="http://schemas.microsoft.com/developer/vstatemplatemanifest/2011" TemplateVersion="1.0">
  <ProjectTemplate ProjectType="msBuild" TemplateName="vbaddin">
    <ProjectItems>
      <ProjectItem ReplaceParameters="true"

                   SourceFilePath="TemplateProjectVB\TemplateProject.vbproj"

                   TemplateFilePath="vbaddin\AddIn.vbproj"

                   TargetFilePath="$projectname$.csproj"

                   TargetItemType="Project" />

      <ProjectItem ReplaceParameters="true"

                   SourceFilePath="TemplateProjectVB\AddIn.vb"

                   TemplateFilePath="vbaddin\AddIn.vb"

                   TargetFilePath="AddIn.vb" />

      <ProjectItem ReplaceParameters="true"

                   SourceFilePath="TemplateProjectVB\My Project\AssemblyInfo.vb"

                   TemplateFilePath="vbaddin\AssemblyInfo.vb"

                   TargetFilePath="vbaddin\AssemblyInfo.vb" />
		<AutoGenProjectItem TargetFilePath="mygeneratedkeyfile.snk" AutoGenerate="StrongNameKeyFile" />
    </ProjectItems>
</ProjectTemplate>
</VstaTemplates>




Отличается.ВБ
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices

' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.

' Review the values of the assembly attributes

<Assembly: AssemblyTitle("$safeprojectname$")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("")>
<Assembly: AssemblyProduct("$safeprojectname$")>
<Assembly: AssemblyCopyright("")>
<Assembly: AssemblyTrademark("")>

<Assembly: ComVisible(False)>

'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("$guid2$")>

' Version information for an assembly consists of the following four values:
'
'      Major Version
'      Minor Version
'      Build Number
'      Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>

<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>



Я использовал исполняемый файл "EnableVstaEventLogging.exe-который находится в SDK...Папка Tools для активации дополнительных выходных данных в средстве просмотра событий. Он показывает 2 предупреждения и 1 ошибку, но я не знаю, что с этим делать.

2 предупреждения

- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="VSTA" /> 
  <EventID Qualifiers="0">0</EventID> 
  <Level>3</Level> 
  <Task>0</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2018-03-07T21:48:29.000000000Z" /> 
  <EventRecordID>100</EventRecordID> 
  <Channel>VSTA Log</Channel> 
  <Computer>N7P179USB64BIT.de.cenit-group.com</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>devenv(19600): Warning: System.Runtime.InteropServices.COMException (0x80004005): A project with that name is already opened in the solution. at EnvDTE.SolutionClass.AddFromFile(String FileName, Boolean Exclusive) at Microsoft.VisualStudio.Tools.Applications.Package.IdeWcfService.<>c__DisplayClass32_1.<AddProjectFromFile>b__0() at Microsoft.VisualStudio.Tools.Applications.Common.VstaCallbackBase.ExecuteAction(String id) 3/7/2018 1:48:29 PM</Data> 
  </EventData>
  </Event>


- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="VSTA" /> 
  <EventID Qualifiers="0">0</EventID> 
  <Level>3</Level> 
  <Task>0</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2018-03-07T21:48:29.000000000Z" /> 
  <EventRecordID>101</EventRecordID> 
  <Channel>VSTA Log</Channel> 
  <Computer>N7P179USB64BIT.de.cenit-group.com</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>devenv(19600): Warning: System.Runtime.InteropServices.COMException (0x80004005): A project with that name is already opened in the solution. at Microsoft.VisualStudio.Tools.Applications.Common.VstaCallbackBase.InvokeOnMainThread(String name, Action action) at Microsoft.VisualStudio.Tools.Applications.Package.VstaPackage.InvokeOnMainThreadIfNeeded(String name, Action action) at Microsoft.VisualStudio.Tools.Applications.Package.IdeWcfService.AddProjectFromFile(String relativeProjectPath, String relativeSolutionPath, String solutionName, String codeFileExtension, Boolean returnReferencePathList, Boolean getPrjImports, String& rootDir, VstaIdeProjectItemInfo[]& initProjItemInfoList, String[]& referencePathList, String[]& importsList) 3/7/2018 1:48:29 PM</Data> 
  </EventData>
  </Event>


Ошибка:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="VSTA" /> 
  <EventID Qualifiers="0">0</EventID> 
  <Level>2</Level> 
  <Task>0</Task> 
  <Keywords>0x80000000000000</Keywords> 
  <TimeCreated SystemTime="2018-03-07T21:48:29.000000000Z" /> 
  <EventRecordID>102</EventRecordID> 
  <Channel>VSTA Log</Channel> 
  <Computer>N7P179USB64BIT.de.cenit-group.com</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>AutoFast(10220): Error: Microsoft.VisualStudio.Tools.Applications.IdeCommunications.IdeException: Exception of type 'Microsoft.VisualStudio.Tools.Applications.IdeCommunications.IdeException' was thrown. at Microsoft.VisualStudio.Tools.Applications.Common.VstaWcfProxyBase`2.CallService[LT](Func`1 func, Boolean ignoreCommunicationFailure) at Microsoft.VisualStudio.Tools.Applications.IdeCommunications.IdeProxy.AddProjectFromFile(String relativeProjectName, String relativeSolutionPath, String solutionName, String codeFileExtension, List`1 referencePathList, List`1 projectImportList, VstaIdeProjectItemInfo[]& initProjItemInfoList) at Microsoft.VisualStudio.Tools.Applications.IdeCommunications.IdeServer.AddProjectFromFile(String relativeProjectName, String relativeSolutionPath, String solutionName, String codeFileExtension, List`1 referencePathList, List`1 projectImportList, VstaIdeProjectItemInfo[]& initProjItemInfoList) at Microsoft.VisualStudio.Tools.Applications.IdeCommunications.IdeCommunicationsServer.Microsoft.VisualStudio.Tools.Applications.IdeCommunications.External.IIdeCommunications.OpenProject(IIdeProjectCallback ideProjectCallback, IDataStore dataStore) 3/7/2018 1:48:29 PM</Data> 
  </EventData>
  </Event>


В предупреждении говорится, что есть проект с таким же названием, но я немного заблудился. Я проверил переменную "storageVB" и похоже, что там GUID заменяются и они меняются, если я перекомпилирую.


Большое вам спасибо за вашу помощь и чтение этой книги! Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.


Спасибо!

Марк

1 Ответов

Рейтинг:
7

Mark_G00

Наконец-то до меня дошло. Это был файл манифеста, который я использовал для создания файла шаблона. О боже....Я пропустил один TargetFilePath, и он все еще был установлен в файл проекта C#.

<?xml version="1.0" encoding="utf-8" ?>
<VstaTemplates xmlns="http://schemas.microsoft.com/developer/vstatemplatemanifest/2011" TemplateVersion="1.0">
  <ProjectTemplate ProjectType="msBuild" TemplateName="vbaddin">
    <ProjectItems>
      <ProjectItem ReplaceParameters="true"

                   SourceFilePath="TemplateProjectVB\TemplateProject.vbproj"

                   TemplateFilePath="vbaddin\AddIn.vbproj"

                   TargetFilePath="$projectname$.vbproj"     <- was ".....csproj"

                   TargetItemType="Project" />

      <ProjectItem ReplaceParameters="true"

                   SourceFilePath="TemplateProjectVB\AddIn.vb"

                   TemplateFilePath="vbaddin\AddIn.vb"

                   TargetFilePath="AddIn.vb" />

      <ProjectItem ReplaceParameters="true"

                   SourceFilePath="TemplateProjectVB\My Project\AssemblyInfo.vb"

                   TemplateFilePath="vbaddin\AssemblyInfo.vb"

                   TargetFilePath="vbaddin\AssemblyInfo.vb" />
		<AutoGenProjectItem TargetFilePath="mygeneratedkeyfile.snk" AutoGenerate="StrongNameKeyFile" />
    </ProjectItems>
</ProjectTemplate>
</VstaTemplates>


Maciej Los

Молодец!
Пожалуйста, отметьте свой ответ как решение (зеленая кнопка). Это позволит удалить ваш вопрос из списка без ответа.