简单的 Xamarin Studio 加载项空项目模板问题

Simple Xamarin Studio add-in empty project template issues

我正在尝试使用 "Addin Maker" 插件(版本 1.3.2)在 Xamarin Studio 中创建简单的项目模板插件。插件项目引用 Monodevelop.Addins 包(版本 0.3.9)。

我有简单的Manifest.addin.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ExtensionModel>

    <Runtime>
        <Import file="Templates/EmptyTemplate.xpt.xml"/>
    </Runtime>

    <Extension path="/MonoDevelop/Ide/ProjectTemplates">
        <ProjectTemplate id="EmptyTemplate" file="Templates/EmptyTemplate.xpt.xml"/>
    </Extension>
</ExtensionModel>

EmptyTemplate.xpt.xml:

<?xml version="1.0"?>
<Template>
    <TemplateConfiguration>
        <_Name>Test</_Name>
        <Category>crossplat/app/forms</Category>
    </TemplateConfiguration>
    <Actions>
    </Actions>
    <Combine name="test" directory=".">
        <Options>
            <StartupProject>test</StartupProject>
        </Options>
        <Project name="test" directory=".">
            <References>
            </References>
            <Packages>
            </Packages>
            <Files>
            </Files>
        </Project>
    </Combine>
</Template>

可以使用 launch/debug 插件项目或通过在终端中创建 mpack 文件将插件毫无问题地安装到 XS 中。不幸的是,我的测试项目模板在 Multiplatform/App/Xamarin.Forms 或 Other/Miscellaneous/Generis 新项目对话框下不可见。

启动“新建项目”对话框时,可以在日志中找到以下条目:

Loaded assembly: /Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/AddIns/BackendBindings/MonoDevelop.VBNetBinding.dll [External]
INFO [2017-02-20 13:16:17Z]: Add-in loaded: MonoDevelop.ILAsmBinding
INFO [2017-02-20 13:16:17Z]: Add-in loaded: test.test
Loaded assembly: /Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/AddIns/BackendBindings/ILAsmBinding.dll [External]

插件在 XS 插件管理器中的 IDE 扩展部分下也可见。

这个简单的模板加载项有什么问题?

1) 在您的 Manifest.addin.xml 中删除 <Runtime></Runtime> 部分。

2) 由于您正在为模板使用 "file=" 引用,因此请确保将这些模板文件的 Build Action 设置为 AddinFile

示例Properties/Manifest.addin.xml

<?xml version="1.0"?>
<ExtensionModel>
    <Extension path="/MonoDevelop/Ide/ProjectTemplates">
        <ProjectTemplate id="RealmEmptyProject" file="templates/PsEmptyProject.xpt.xml" />
    </Extension>
</ExtensionModel>

示例模板:

<?xml version="1.0" encoding="UTF-8"?>
<Template Originator="SushiHangover">
    <TemplateConfiguration>
        <Icon>md-project</Icon>
        <LanguageName>C#</LanguageName>
        <_Name>Realm (Viper) Project</_Name>
        <Category>other/net/general</Category>
        <_Description>Creates an empty Realm Database Viper (MVVM-hybrid) project</_Description>
        <DefaultFilename>RealmViperProject</DefaultFilename>
        <GroupId>md-realm-project</GroupId>
    </TemplateConfiguration>

    <Combine name="${ProjectName}" directory=".">
        <Project name="${ProjectName}" directory=".">
            <References>
                <Reference type="Package" refto="System" LocalCopy="false" SpecificVersion="true" />
            </References>
            <Packages>
                <package id="Realm" />
            </Packages>
        </Project>
    </Combine>
</Template>

1) 感谢@sushihangover 的回答。这也是我问题的一部分。

在我的场景中,只要选择了复制到 xpt 文件的输出目录,它也适用于 <Runtime> 部分和每个构建操作。

2) 我还注意到使用 "play" 选项从一个 XS 实例安装到新调试实例的插件并不总是干净的 installed/uninstalled。因此,例如,当我在我的 xpt 中使用其中一个选项时,直到我从新的调试 XS 实例手动卸载 add-in 并清理项目时,它才被考虑在内。

3) 当我在使用 XS 提供的原始 Xamarin.Forms 模板中找到的 <GroupId> 部分时,可能会发生上述情况。我将 <GroupId>md-xamarin-forms-project</GroupId> 从他们的模板复制到我的测试 xpt,因此无法为相同的 <LanguageName> 填充第二个模板。在删除 <GroupId> 部分、卸载 add-in 并清理项目之前,我无法使其工作。