Преобразование конфигурации на NLog не работает

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

Предположим, что у вас есть такой путь:

"path/to/file/folder"

По какой-то причине исполняемые Linux-исполняемые файлы, созданные в eclipse, отлично справляются с этим. Тем не менее, окна очень запутаны, если им задан такой путь, с которым нужно работать!

Как указано выше, существует несколько способов получить текущий путь к исполняемому файлу, но самый простой способ, который я нахожу, создает прелесть в большинство случаев добавляет это к FRONT вашего пути:

"./path/to/file/folder"

Просто добавив «./», вы должны отсортировать вас! :) Затем вы можете начать загрузку из любой директории, если хотите, с самим исполняемым файлом.

EDIT: Это не сработает, если вы попытаетесь запустить исполняемый файл из кода :: blocks if это среда разработки, так как по какой-то причине код :: блоки не загружает прав ...: D

EDIT2: Некоторые новые вещи, которые я нашел, это то, что если вы укажете статический путь например, в вашем коде (Предположим, что Example.data - это то, что вам нужно загрузить):

"resources/Example.data"

Если вы запустите приложение из фактического каталога (или в Windows вы создаете ярлык и установите рабочий каталог в каталог приложения), тогда он будет работать так. Помните об этом при отладке проблем, связанных с отсутствием путей к ресурсам и файлам. (Особенно в IDE, которые устанавливают неправильный рабочий каталог при запуске сборки exe из среды IDE)

13
задан Luke Girvin 9 May 2016 в 15:59
поделиться

1 ответ

Я использовал и время изготовления web.config преобразование с пакетом SlowCheetah NuGet и встроенное преобразование времени развертывания. Для NLog.config файлы я имею NLog.*.config файлы для каждой среды сборки. Ранее каждый из тех файлов имел полный NLog.config содержание и имел задачу в развертывании, чтобы перезаписать NLog.config с определенным NLog.*.config и удалить весь NLog.*.config впоследствии.

Решительный сегодня, чтобы иметь эти файлы, чтобы быть поддающимся преобразованию вместо этого, подобным пути web.config сгенерирован от [1 110] и web.template.*.config (с помощью [1 112] файл), но не замена NLog.config во время изготовления (не хотят иметь пути файла журнала серверов в моих выполнениях localhost).

Вот то, как у меня есть он работа - в [1 114] файл, который я использовал OnAfterCopyAllFilesToSingleFolderForPackage "событие" для преобразования NLog.config файл во временный промежуточный каталог (который впоследствии используется для публикации). Это - полное ProjectName.wpp.targets файл:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <!-- Make sure Web.config will be there even for package/publish -->
  <Target Name="CopyWebTemplateConfig" BeforeTargets="PrepareForBuild">
    <Copy SourceFiles="Web.template.config"
          DestinationFiles="Web.config"/>
  </Target>

  <PropertyGroup>
    <PrepareForRunDependsOn>
      $(PrepareForRunDependsOn);
      UpdateWebConfigBeforeRun;
    </PrepareForRunDependsOn>
  </PropertyGroup>

  <PropertyGroup>
    <OnAfterCopyAllFilesToSingleFolderForPackage>
      $(OnAfterCopyAllFilesToSingleFolderForPackage);
      UpdateNLogConfigBeforePublish;
    </OnAfterCopyAllFilesToSingleFolderForPackage>
  </PropertyGroup>

  <!-- This target will run right before you run your app in Visual Studio -->
  <Target Name="UpdateWebConfigBeforeRun">
    <Message Text="Configuration: $(Configuration): Web.template.$(Configuration).config"/>
    <TransformXml Source="Web.template.config"
              Transform="Web.template.$(Configuration).config"
              Destination="Web.config" />
  </Target>

  <Target Name="UpdateNLogConfigBeforePublish">
    <Message Text="Configuration: $(Configuration): NLog.$(Configuration).config"/>
    <TransformXml Source="NLog.config"
              Transform="NLog.$(Configuration).config"
              Destination="$(IntermediateOutputPath)\Package\PackageTmp\NLog.config" />
  </Target>

  <!-- Exclude the config template files from the created package -->
  <Target Name="ExcludeCustomConfigTransformFiles" BeforeTargets="ExcludeFilesFromPackage">
    <ItemGroup>
      <ExcludeFromPackageFiles Include="Web.template.config;Web.template.*.config"/>
      <ExcludeFromPackageFiles Include="NLog.*.config"/>
    </ItemGroup>
    <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high"/>
  </Target>
</Project>

Эти NLog.*.config файлы затем используют стандартные преобразования, например:

<?xml version="1.0" encoding="utf-8"?>

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
      internalLogFile="c:\temp\ProjectName.ENV.nlog.txt"
      xdt:Transform="SetAttributes(internalLogFile)">

    <variable name="envName" value="ENV"
              xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />

    <targets>
        <target name="exceptionsMail" to="ENV.email@some.email.domain"
                xdt:Transform="SetAttributes(to)" xdt:Locator="Match(name)" />
    </targets>

    <rules>
        <logger name="Exceptions" minlevel="Error" writeTo="exceptionsMail"
                xdt:Transform="Insert" />
    </rules>
</nlog>
0
ответ дан 30 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

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