Не отвечающий 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"

0 ответов

Другие вопросы по тегам