2015-09-02 3 views
0

Я пишу плагин, который добавляет шаблон проекта. Этот шаблон должен использовать некоторые файлы, которые используют шаблоны по умолчанию.Xamarin add-in reference location location

Я ищу что-то вроде переменной ${ProjectName}, но для папки установки. Что-то вроде этого существует или есть какое-то другое обходное решение, которое я могу использовать?

Вот

<Files> 
       <Directory name="Resources"> 
        <RawFile name="Default.png" src="${Reference To Installation Folder}/Templates/iOS/Default.png" /> 
        <RawFile name="[email protected]" src="${Reference To Installation Folder}/Templates/iOS/[email protected]" /> 
       </Directory> 
</Files> 

ответ

1

В папке установки я предполагаю, что вы имеете в виду, где установлен Xamarin студии.

Я также предполагаю, что вы не можете распространять файлы с вашим добавлением, поскольку они являются частью Xamarin Studio и недоступны только с помощью MonoDevelop.

Нет свойства/параметра, указывающего, где Xamarin Studio установлен, насколько мне известно.

Атрибут src в RawFile не поддерживает замену параметров, поэтому даже если бы был параметр, указывающий на место установки Xamarin Studio, его нельзя было использовать.

Таким образом, вы остались с двумя вариантами, которые я могу думать:

  1. Реализовать мастера для project template.
  2. Внесите свой собственный шаблон RawFile.

Мастер шаблона проекта означал бы, что вы можете поддерживать только 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 студия установлена. Один из способов сделать это - найти тип в одной из ассамблей Xamarin Studio, а затем получить местоположение сборки.

Смежные вопросы