Xamarin插件参考安装位置

时间:2015-09-02 14:50:34

标签: add-in xamarin-studio

我正在编写一个添加项目模板的插件。此模板需要使用默认模板使用的一些文件。

我正在寻找像${ProjectName}变量这样的东西但是对于安装文件夹。这样的事情是存在的还是我可以使用的其他解决方法?

这是

<Files>
                <Directory name="Resources">
                    <RawFile name="Default.png" src="${Reference To Installation Folder}/Templates/iOS/Default.png" />
                    <RawFile name="Default@2x.png" src="${Reference To Installation Folder}/Templates/iOS/Default@2x.png" />
                </Directory>
</Files>

1 个答案:

答案 0 :(得分:1)

通过安装文件夹我假设您的意思是安装了Xamarin Studio。

我还假设您不能使用您的插件分发文件,因为它们是Xamarin Studio的一部分,而不仅仅是MonoDevelop。

据我所知,没有属性/参数指定Xamarin Studio的安装位置。

RawFile中的src属性不支持替换参数,因此即使有一个参数指向Xamarin Studio的安装位置,也无法使用它。

所以你有两个我能想到的选择:

  1. 为您的project template实施向导。
  2. 实施您自己的RawFile模板。
  3. 项目模板向导意味着您只能支持Xamarin Studio 5.9及更高版本。所以我暂时忽略这一点。上述两个选项在实现方式上都类似。

    对于您自己的RawFile模板版本,您可以定义要在addin.xml文件中使用的类:

    <Extension path = "/MonoDevelop/Ide/FileTemplateTypes">
        <FileTemplateType name = "RawFileNoExtension" class = "MyAddin.MyRawFileExtensionTemplate"/>
    </Extension>
    

    然后,您可以创建自己的文件扩展名模板类。以下是从现有RawFileDescriptionTemplate中获取的示例,但我删除了一些错误处理:

    public class MyRawFileExtensionTemplate : RawFileDescriptionTemplate
    {
        FilePath contentSrcFile;
    
        public override void Load (XmlElement filenode, FilePath baseDirectory)
        {
            base.Load (filenode, baseDirectory);
            var srcAtt = filenode.Attributes["src"];
    
            // TODO: Replace src with path to Xamarin Studio.
    
            contentSrcFile = FileService.MakePathSeparatorsNative (srcAtt.Value);
            contentSrcFile = contentSrcFile.ToAbsolute (baseDirectory);
        }
    
        public override Stream CreateFileContent (SolutionItem policyParent, Project project, string language,
            string fileName, string identifier)
        {
            return File.OpenRead (contentSrcFile);
        }
    }
    

    您需要使用代码替换TODO部分以查找Xamarin Studio的安装位置。一种方法是在Xamarin Studio的一个组件中找到一个类型,然后获得组件的位置。