Part of the VSIX Community
This package contains C# source generators that generate code from .vsixmanifest
files and .vsct
files.
These source generators are a replacement for the single-file generators from the VsixSynchronizer extension.
The source generator will create a class called Vsix
with the following constants:
Constant | Source |
---|---|
Author |
<Identity Publisher=""/> |
Description |
<Description/> |
Id |
<Identity Id=""/> |
Language |
<Identity Language=""/> |
Name |
<DisplayName/> |
Version |
<Identity Version=""/> |
The Vsix
class will be generated in the root namespace of the project. If you would like to generate the code into a different namespace, you can specify the namespace by defining the Namespace
metadata for the source.extension.vsixmanifest
file like this:
<ItemGroup>
<None Include="source.extension.vsixmanifest">
<Namespace>MyCustomNamespace</Namespace>
</None>
</ItemGroup>
The source generator will create a container class that is named after the .vsct
file. Within that container class, a class will be created for each <GUIDSymbol>
.
The class for a <GUIDSymbol>
contains a Guid
and GuidString
field that defines the GUID value, and each <IDSymbol>
is defined as a constant.
For example, a VSCommandTable.vsct
file that looks like this:
<CommandTable xmlns='http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<Symbols>
<GuidSymbol name='MyPackage' value='{e5d94a98-30f6-47da-88bb-1bdf3b4157ff}'>
<IDSymbol name='MyFirstCommand' value='0x0001' />
<IDSymbol name='MySecondCommand' value='0x0002' />
</GuidSymbol>
</Symbols>
</CommandTable>
Will result in this:
internal sealed partial class VSCommandTable
{
internal sealed partial class MyPackage
{
public const string GuidString = "e5d94a98-30f6-47da-88bb-1bdf3b4157ff";
public static readonly Guid Guid = new Guid(GuidString);
public const int MyFirstCommand = 1;
public const int MySecondCommand = 2;
}
}
You can then access the Guid
and IDs like this:
[GuidAttribute(VSCommandTable.MyPackage.GuidString)]
The classes will be generated in the root namespace of the project. If you would like to generate the code into a different namespace, you can specify the namespace by defining the Namespace
metadata for the VSCTCompile
item like this:
<ItemGroup>
<VSCTCompile Include="MyCommandTable.vsct">
<ResourceName>Menus.ctmenu</ResourceName>
<Namespace>MyCustomNamespace</Namespace>
</VSCTCompile>
</ItemGroup>
If you are migrating from the Vsix Synchronizer extension and would like to continue to use the PackageGuids
and PackageIds
classes that it generates, you can change the output format by defining the Format
metadata for the VSCTCompile
item like this:
<ItemGroup>
<VSCTCompile Include="MyCommandTable.vsct">
<ResourceName>Menus.ctmenu</ResourceName>
<Format>VsixSynchronizer</Format>
</VSCTCompile>
</ItemGroup>
This will result in classes like this:
internal sealed partial class PackageGuids
{
public const string MyPackageString = "e5d94a98-30f6-47da-88bb-1bdf3b4157ff";
public static readonly Guid MyPackage = new Guid(MyPackageString);
}
internal sealed partial class PackageIds
{
public const int MyFirstCommand = 1;
public const int MySecondCommand = 2;
}