Для относительных путей, вот что я сделал. Я знаю возраст этого вопроса, я просто хочу внести более простой ответ, который работает в большинстве случаев:
Предположим, что у вас есть такой путь:
"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)
Я использовал и время изготовления 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>