2017-05-24 1 views
2

J'ai implémenté un générateur de fichier unique basé sur le modèle [1] (qui compile dans une sortie VSIX installable, y compris l'enregistrement automatique des composants) et :Générateur de fichier unique ne fonctionne pas pour les projets .NET Standard dans Visual Studio 2017

  • Il fonctionne pour les projets .NET classiques dans VS 2015 et VS2017;
  • Cela fonctionne pour les projets .NET Core dans VS2017;
  • Mais ne fonctionne pas pour les projets .NET Standard dans VS2017.

example

Tous les HasCustomTool.xml fichiers ont la même configuration, tous ont l'attribut « Outil personnalisé » spécifié.

Lorsque je regarde les fichiers .csproj, je peux voir qu'ils sont différents. Le contenu du fichier DotNetCore.csproj est (travail):

<ItemGroup> 
    <Compile Update="HasCustomTool.cs"> 
     <DependentUpon>HasCustomTool.xml</DependentUpon> 
     <DesignTime>True</DesignTime> 
     <AutoGen>True</AutoGen> 
    </Compile> 
    </ItemGroup> 

    <ItemGroup> 
    <None Update="HasCustomTool.xml"> 
     <LastGenOutput>HasCustomTool.cs</LastGenOutput> 
     <Generator>PtResxErrorTool</Generator> 
    </None> 
    </ItemGroup> 

Alors que le fichier DotNetStandard.csproj a:

<ItemGroup> 
     <None Update="HasCustomTool.xml"> 
      <LastGenOutput>HasCustomTool.cs</LastGenOutput> 
      <Generator>PtResxErrorTool</Generator> 
     </None> 
    </ItemGroup> 

Lorsque vous copiez sur le balisage de DotNetCore.csproj à la DotNetStandard.csproj (à la main), vous obtenez le structure souhaitée - mais le générateur n'est jamais activé.

Est-ce que quelqu'un a écrit avec succès un générateur de fichier unique VSIX pour les projets .NET Standard? Des pointeurs sur la façon de déboguer ce problème?

[1] https://github.com/Microsoft/VSSDK-Extensibility-Samples/tree/master/Single_File_Generator

+1

J'ai eu un problème similaire mais pas identique exécutant des outils personnalisés - mon problème était d'installer VS2015 sur mon PC, qui avait auparavant seulement eu VS2017 installé. Les détails complets du problème se trouvent sur https://developercommunity.visualstudio.com/content/problem/72482/custom-tool-not-found.html?childToView=73591#comment-73591 –

+0

Voir aussi la question similaire sur https://stackoverflow.com/questions/44616852/visual-studio-2017-wont-run-custom-tool-in-net-standard-library –

+0

Comment êtes-vous arrivé à la première base de ce projet? Microsoft.VisualStudio.Shell.Interop est incompatible avec les versions .NET Standard. Au moins, c'est ce que le chargeur NuGet me dit. –

Répondre

3

Vous devez ajouter une nouvelle CodeGeneratorRegistration à votre classe.

"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}"

dans mon cas mon décl classe ressemblait

[ComVisible(true)] 
[Guid(GuidList.GuidI18NReactivetring)] 
[ProvideObject(typeof(I18NReactive))] 
[CodeGeneratorRegistration(typeof(I18NReactive), "I18N.Reactive", vsContextGuids.vsContextGuidVCSProject, GeneratesDesignTimeSource = true)] 
[CodeGeneratorRegistration(typeof(I18NReactive), "I18N.Reactive", "{9A19103F-16F7-4668-BE54-9A1E7A4F7556}", GeneratesDesignTimeSource = true)] 
public class I18NReactive : IVsSingleFileGenerator, IObjectWithSite 
{ 
} 

Les informations source provenait de ce fil

https://github.com/aspnet/Tooling/issues/394

+0

Comment avez-vous obtenu les bibliothèques standard .NET pour référencer le package Microsoft.VisualStudio.Shell.Interop? Lorsque j'essaie d'ajouter le paquet à l'aide du gestionnaire de paquetage Nuget, je reçois un message indiquant que le paquet VS Interop est compatible avec les bibliothèques .NET Standard et .NET Core. –