Скопируйте файлы содержимого в выходной каталог приложения DNX Console через project.json

Я только начал работать с DNX 1.0.0-rc1-update1 в VS2015. Моим первым приложением является проект "Консольное приложение (пакет)". Все работает, кроме журнала NLog. Я подозреваю это, потому что NLog.config не копируется в выходную папку. Как я могу заставить VS скопировать этот файл в выходную папку через project.json?

Я попытался добавить переменную "resource", как это, но она не работает:

project.json

...
"resource":"NLog.config",
...

РЕДАКТИРОВАТЬ 1: Я использую dnx451, поэтому совместимость не является проблемой.

ИЗМЕНИТЬ 2: Я добавил следующее в project.json

"scripts": {
    "postbuild": [
      "%project:Directory%/../scripts/copy_resources.bat \\\"%project:Directory%\\\" \\\"%project:Directory%/../artifacts/bin/%project:Name%/%project:Version%/dnx451\\\""
    ] 
  }

copy_resources.bat

echo "Running script" >> C:\logs\log.txt
echo %1 >> C:\logs\log.txt
echo %2 >> C:\logs\log.txt

xcopy %1\NLog.config %2 /U /Y

В окне вывода в VS нет ничего, чтобы показать, что действительно был запущен script. Кроме того, log.txt пуст.

Как отлаживать процесс сборки?

Ответ 1

Тем временем опубликован RTM.NET RTM.

Теперь текущий способ скопировать материал в выходную папку с помощью buildOptions в project.json.

Здесь есть опция copyToOutput, которую вы можете использовать следующим образом:

До:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  // more stuff
}

После:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": { "includeFiles": [ "NLog.config" ] }
  },

  // more stuff
}

Ответ 2

Используйте copyToOutput внутри buildOptions:

{
  "buildOptions": {
    "copyToOutput":  "NLog.config" 
  }
}

или для нескольких файлов объявляет массив:

{
  "buildOptions": {
    "copyToOutput":  ["NLog.config", "testdata\\"]
  }
}

Чтобы скопировать каталог, не забудьте добавить конечный \\.

Ответ 3

По умолчанию все файлы кода в каталоге, содержащем project.json, являются включенных в проект. Вы можете контролировать это с помощью include/exclude разделы проекта. json.

Дополнительная информация: http://docs.asp.net/en/latest/dnx/projects.html#including-excluding-files

Вы используете раздел content project.json, как этот

{
  "content": [
    "NLog.config"
  ]
}

Теперь в документации указано, что файл должен был быть скопирован по умолчанию в качестве содержимого по умолчанию, если * (подстановочный знак для всех файлов), но вы можете заставить его явно указывать нужный файл в контенте.

Ответ 4

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

Как указывает @Nkosi, значение по умолчанию для content равно **/* (вы можете видеть через ссылку docs, которую он предоставил, а также schema).

Что касается вашего шага postbuild, вы можете получить его "создание выходов" .