Не отвечающий IVsSingleFileGenerator в проекте C# Visual Studio
Я пытался следовать онлайн-учебнику, чтобы узнать, как создавать и регистрировать генераторы файлов Visual Studio (также называемые пользовательскими инструментами). Я считаю, что мне удалось зарегистрировать инструмент, по крайней мере, с частичным успехом, поскольку в другом проекте Visual Studio я могу назначить 'VsTools' (пространство имен класса генератора файлов) в качестве "Пользовательского инструмента" файла.txt в диалоговое окно свойств файла.txt, а затем, после запуска инструмента, генерируется отдельный файл. Однако, хотя я ожидаю, что сгенерированный файл будет отображать число (в частности, количество строк в файле, к которому применяется пользовательский инструмент), сгенерированный файл вообще не имеет содержимого.
Может ли кто-нибудь помочь мне понять, как я мог неправильно зарегистрировать генератор файлов или неправильно реализовать пользовательскую логику, используемую для получения количества строк исходного файла?
Ниже приведен код реализации IVsSingleFileGenerator:
namespace VsTools
{
[Guid("A2...")]
public class ToolBase : IVsSingleFileGenerator
{
public int DefaultExtension(out string InputfileRqExtension)
{
InputfileRqExtension = ".txt";
return VSConstants.S_OK;
}
public int Generate(
string inputFilePath,
string inputFileContents,
string defaultNamespace,
IntPtr[] outputFileContents,
out uint outputByteCount,
IVsGeneratorProgress generateProgress)
{
int lineCount = inputFileContents.Split('\n').Length;
byte[] bytes = Encoding.UTF8.GetBytes(lineCount.ToString());
int length = bytes.Length;
outputFileContents[0] = Marshal.AllocCoTaskMem(length);
Marshal.Copy(bytes, 0, outputFileContents[0], length);
outputByteCount = (uint)length;
return VSConstants.S_OK;
}
}
}
Файл реестра, используемый для регистрации генератора файлов "VsTools.ToolBase":
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\CLSID\{A2..}]
"InprocServer32"="C:\\Windows\\System32\\mscoree.dll"
"ThreadingModel"="Both"
"Class"="VsTools2.ToolBase"
"Assembly"="VsTools, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e9b..."
"CodeBase"=file:///C:\\VsTools\\VsTools.dll
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\Generators\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\VsTools]
"CLSID"="{A2..}"
"GeneratesDesignTimeSource"=dword:00000001
Были выполнены следующие команды:
regasm /codebase "C:\VsTools\VsTools.dll"
gacutil /i "C:\VsTools\VsTools.dll"