Виртуальный каталог в веб-проекте установки

Ну, на самом деле, я вижу, что вы просто изменили линеаризацию конструктора, что я считаю довольно простым, поэтому сначала давайте разобраться в линеаризации конструктора

Первый пример

object Linearization3 {
  def main(args: Array[String]) {
    var x = new X
    println()
    println(x.foo)
  }
}

class A {
  print("A")

  def foo() = "A"
}

trait B extends A {
  print("B")

  override def foo() =   super.foo() + "B" // Hence I flipped yours to give exact output as constructor
}

trait C extends B {
  print("C")

  override def foo() =  super.foo() + "C"
}

trait D extends A {
  print("D")

  override def foo() =  super.foo() + "D"
}

class X extends A with D with C with B

Какие выходы:

ADBC
ADBC

Итак, чтобы вычислить вывод, я просто беру классы / черты один за другим слева направо, а затем рекурсивно записываю выходы (без дубликатов), вот как:

  1. Наша подпись класса: class X extends A with D with C with B
  2. Итак, первая - это A, так как у A нет родителей (deadend) просто напечатайте свой конструктор
  3. Теперь D, который расширяет A, поскольку мы уже напечатайте A, затем давайте напечатаем D
  4. Теперь C, который расширяет B, который расширяет A, поэтому мы пропускаем A, потому что он уже напечатан, затем мы печатаем B, а затем печатаем C (это похоже на рекурсивную функцию )
  5. Теперь B, который расширяет A, пропустим A, и мы также пропустим B (ничего не напечатано)
  6. , и вы получили ADBC!

Обратный пример (ваш пример)

object Linearization3 {
  def main(args: Array[String]) {
    var x = new X
    println()
    println(x.foo)
  }
}

class A {
  print("A")

  def foo() = "A"
}

trait B extends A {
  print("B")

  override def foo() = "B" + super.foo()
}

trait C extends B {
  print("C")

  override def foo() = "C" + super.foo()
}

trait D extends A {
  print("D")

  override def foo() = "D" + super.foo()
}

class X extends A with D with C with B

Выход:

ADBC
CBDA

Надеюсь, это было достаточно просто для новичка Мне нравится

16
задан chugh97 3 April 2009 в 14:59
поделиться

7 ответов

Если вы не хотите, чтобы пользователь изменял виртуальный каталог, вы можете просто удалить диалоговое окно «Адрес установки» из Пользовательский интерфейс.

  1. Щелкните правой кнопкой мыши по проекту установки и выберите «Пользовательский интерфейс».
  2. Разверните узел «Старт».
  3. Щелкните правой кнопкой мыши «Адрес установки».
  4. Выберите «Удалить»

Если вам нужны другие параметры для веб-сайта, виртуального каталога, пула приложений, которые обычно выбираются в диалоговом окне адреса установки, вы можете переопределить его с помощью Пользовательское действие, как описали другие.

Однако, по моему опыту, пользовательские действия не помогают с настройками по умолчанию, которые пользователь может изменить, потому что они выполняют После диалоговых окон, которые запрашивают пользовательский ввод.

Самый простой способ установить некоторые значения по умолчанию, которые пользователь может переопределить при необходимости в диалоговом окне, - это сделать следующее.

  1. Удалите страницу приветствия.
  2. Добавьте диалоговое окно «Текстовые поля» (например, «Текстовые поля (А)» стр.
  3. Установите необходимые свойства, которые вы хотите переопределить, в «Редактировать *** Свойство» и установите значение по умолчанию в «Редактировать *** Значение».

Наиболее полезными свойствами (IMHO) являются.

TARGETDIR - Место для копирования файлов.
TARGETVDIR - Виртуальный каталог, который будет создан на указанном сайте.
TARGETAPPPOOL - Пул приложений для использования (ПРИМЕЧАНИЕ. Он должен существовать, он не будет создан)
TARGETSITE - веб-сайт, на котором создается виртуальный каталог (ПРИМЕЧАНИЕ. Это значение метабазы ​​ для веб-сайта ... Например: «/ LM / W3svc / 2». Также обратите внимание, что сайт должен существовать).

Полный список свойств установщика можно найти здесь здесь .

Если вы действительно хотите лучше контролировать настройку IIS, я бы предложил изменить ваш проект на стандартный. Проект установщика Windows и создание пользовательских действий установки, чтобы вы могли программно создавать AppPools. Хорошее место, чтобы начать понимать программирование создания этих вещей - это здесь .

Самая большая причина для того, чтобы сделать это таким образом, состоит в том, что пользовательские действия запускаются после запроса , но пул приложений и веб сайты должны быть созданы , прежде чем установщик может запросить.

34
ответ дан 30 November 2019 в 16:10
поделиться

Чтобы получить виртуальный каталог с помощью Context.Parameters

  1. Добавьте настраиваемое действие для установки (используйте это url , если вы хотите знать, как добавлять настраиваемые действия)
  2. Щелкните правой кнопкой мыши на настраиваемом действии и выберите окно свойств.
  3. Для свойства CustomActionsData установите /targetvdir="[TARGETVDIR]".
  4. Теперь в вашем классе установщика вы можете получить имя виртуального каталога с помощью Context.Parameters ["targetvdir"]. Надеюсь, что это вам помогло:)
2
ответ дан 30 November 2019 в 16:10
поделиться

Org не допускает использование открытого источника или GPL с открытым исходным кодом.

Решение: * отредактируйте пользовательское действие (щелкните правой кнопкой мыши> просмотр> пользовательское действие), чтобы исправить виртуальный каталог и путь Измените data_mactiondata:

/targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="[TARGETVDIR]" /targetsite="[TARGETSITE]" 

На:

  /targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="FIXED_NAME" /targetsite="[TARGETSITE]" 

Вы можете просто удалить адрес установки из пользовательского интерфейса и настроить компонент, который передает информацию в пользовательскую установку

  • Записать оболочку поверх msbuild с помощью msbuildtasks
1
ответ дан 30 November 2019 в 16:10
поделиться

Выберите проект установки, «Просмотр»> «Редакторы»> «Интерфейс пользователя», выберите диалоговые окна «Адрес установки» и удалите их.

«РЕДАКТИРОВАТЬ»:

Как указывает Шей, пользователи могут переопределить настройки по умолчанию. установить местоположение из командной строки. Чтобы переопределить это, вы должны установить свойство TARGETDIR в вашей InstallExecuteSequence. К сожалению, вы не можете изменить эту последовательность в Visual Studio, вам нужно использовать Orca:

  1. Создайте свой проект установки.
  2. Откройте файл MSI из Orca.
  3. Создайте новое настраиваемое действие типа 51 (установить свойство). с источником "TARGETDIR" (без кавычек), целью вашей целевой папки и уникальным именем для действия (соглашение заключается в использовании GUID с начальным подчеркиванием).
  4. Создайте новую строку в InstallExecuteSequence с вашим уникальным именем для Действие «НЕ установлено» для условия, и порядковый номер перед использованием TARGETDIR (750 был первым использованием в образце, который я сделал, поэтому я использовал последовательность 555).
1
ответ дан 30 November 2019 в 16:10
поделиться

Переключитесь на Wix и используйте их веб-Расширения

1
ответ дан 30 November 2019 в 16:10
поделиться

Для меня в Щелчке правой кнопкой VS

  1. по проекту

  2. установки Представление-> Файловая система

  3. веб-приложение Папка (в левой панели)

  4. в окне свойств (направо, нижняя часть)

  5. Виртуальный каталог (последний)

    Здесь можно измениться/установить путь по умолчанию на IIS т.е. нацелены на каталог, который может быть установлен.

0
ответ дан 30 November 2019 в 16:10
поделиться

В теории звучит неплохо, но, насколько я могу судить, не работает, по крайней мере, для настройки AppPool. У меня есть специальное действие для установки пула приложений (которое, кстати, отлично работает, когда установщик построен с VS2005) в моем проекте веб-настройки vs2008.

DirectoryEntry IISVdir = new DirectoryEntry(String.Format("IIS://{0}{1}/{2}", strServer, strRootSubPath, Vdir));
IISVdir.Properties["AppPoolId"].Value = appPool;
IISVdir.CommitChanges();

Установщик запускается без диалога (удален узел пользовательского интерфейса адреса установки), но AppPool, установленный в виртуальном каталоге, в конечном итоге становится DefaultAppPool.

Другие настраиваемые действия в моем вспомогательном классе выполняются и работают.

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

Спасибо.

3
ответ дан 30 November 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: