Merge pull request #1135 from wabbajack-tools/issue-1134

Issue 1134
This commit is contained in:
Timothy Baldridge 2020-10-24 09:59:11 -06:00 committed by GitHub
commit ab6d8e106d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 365 additions and 13 deletions

View File

@ -1,4 +1,5 @@
using System.Text;
using System;
using System.Text;
using System.Threading.Tasks;
using Alphaleonis.Win32.Filesystem;
using Newtonsoft.Json;
@ -24,18 +25,7 @@ namespace Wabbajack.Lib.CompilationSteps
var data = await source.AbsolutePath.ReadAllTextAsync();
var originalData = data;
data = data.Replace((string)_mo2Compiler.GamePath, Consts.GAME_PATH_MAGIC_BACK);
data = data.Replace(((string)_mo2Compiler.GamePath).Replace("\\", "\\\\"), Consts.GAME_PATH_MAGIC_DOUBLE_BACK);
data = data.Replace(((string)_mo2Compiler.GamePath).Replace("\\", "/"), Consts.GAME_PATH_MAGIC_FORWARD);
data = data.Replace((string)_mo2Compiler.SourcePath, Consts.MO2_PATH_MAGIC_BACK);
data = data.Replace(((string)_mo2Compiler.SourcePath).Replace("\\", "\\\\"), Consts.MO2_PATH_MAGIC_DOUBLE_BACK);
data = data.Replace(((string)_mo2Compiler.SourcePath).Replace("\\", "/"), Consts.MO2_PATH_MAGIC_FORWARD);
data = data.Replace((string)_mo2Compiler.DownloadsPath, Consts.DOWNLOAD_PATH_MAGIC_BACK);
data = data.Replace(((string)_mo2Compiler.DownloadsPath).Replace("\\", "\\\\"),
Consts.DOWNLOAD_PATH_MAGIC_DOUBLE_BACK);
data = data.Replace(((string)_mo2Compiler.DownloadsPath).Replace("\\", "/"), Consts.DOWNLOAD_PATH_MAGIC_FORWARD);
data = RemapData(_mo2Compiler, data);
if (data == originalData)
return null;
@ -43,5 +33,25 @@ namespace Wabbajack.Lib.CompilationSteps
result.SourceDataID = await _compiler.IncludeFile(Encoding.UTF8.GetBytes(data));
return result;
}
public static string RemapData(ACompiler compiler, string data)
{
var gamePath = compiler.GamePath.Normalize();
data = data.Replace(gamePath, Consts.GAME_PATH_MAGIC_BACK, StringComparison.InvariantCultureIgnoreCase);
data = data.Replace(gamePath.Replace("\\", "\\\\"), Consts.GAME_PATH_MAGIC_DOUBLE_BACK, StringComparison.InvariantCultureIgnoreCase);
data = data.Replace(gamePath.Replace("\\", "/"), Consts.GAME_PATH_MAGIC_FORWARD, StringComparison.InvariantCultureIgnoreCase);
var sourcePath = compiler.SourcePath.Normalize();
data = data.Replace(sourcePath, Consts.MO2_PATH_MAGIC_BACK);
data = data.Replace(sourcePath.Replace("\\", "\\\\"), Consts.MO2_PATH_MAGIC_DOUBLE_BACK);
data = data.Replace(sourcePath.Replace("\\", "/"), Consts.MO2_PATH_MAGIC_FORWARD);
var downloadsPath = compiler.DownloadsPath.Normalize();
data = data.Replace(downloadsPath, Consts.DOWNLOAD_PATH_MAGIC_BACK);
data = data.Replace(downloadsPath.Replace("\\", "\\\\"),
Consts.DOWNLOAD_PATH_MAGIC_DOUBLE_BACK);
data = data.Replace(downloadsPath.Replace("\\", "/"), Consts.DOWNLOAD_PATH_MAGIC_FORWARD);
return data;
}
}
}

View File

@ -0,0 +1,313 @@
[General]
selected_profile=@ByteArray(Living Skyrim 2)
gameName=Skyrim Special Edition
gamePath=@ByteArray(C:\\Steam\\steamapps\\common\\Skyrim Special Edition)
version=2.3.2
first_start=false
backup_install=false
[Geometry]
MainWindow_state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x3\0\0\n\0\0\0\0\xa4\xfc\x1\0\0\0\x1\xfb\0\0\0\xe\0l\0o\0g\0\x44\0o\0\x63\0k\x1\0\0\0\0\0\0\n\0\0\0\0X\0\xff\xff\xff\0\0\n\0\0\0\x4P\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0t\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
MainWindow_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\xff\xff\xff\xff\xff\xff\xff\xf8\0\0\n\0\0\0\x5x\0\0\x2\xa7\0\0\0\x14\0\0\a\xa4\0\0\x4\xa4\0\0\0\0\x2\0\0\0\n\0\0\0\0\0\0\0\0\x17\0\0\t\xff\0\0\x5w)
MainWindow_espList_state="@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x2\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x3\xe5\0\0\0\x4\x1\x1\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x4\0\0\x1v\0\0\0\x1\0\0\0\0\0\0\0\x32\0\0\0\x1\0\0\0\0\0\0\0;\0\0\0\x1\0\0\0\0\0\0\x2\x2\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0L)"
MainWindow_downloadView_state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\x1\x1\0\0\0\0\0\0\0\0\0\0\0\b\xf0\0\0\0\x4\0\0\0\x6\0\0\0\x64\0\0\0\x5\0\0\0\x64\0\0\0\x4\0\0\0\x64\0\0\0\a\0\0\0\x64\0\0\x3\xe5\0\0\0\b\x1\x1\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x84\0\0\0\0\0\0\0\b\0\0\x3\x1e\0\0\0\x1\0\0\0\0\0\0\0)\0\0\0\x1\0\0\0\0\0\0\0\x44\0\0\0\x1\0\0\0\0\0\0\0Z\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\x1\0\0\0\0)
MainWindow_modList_state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\t\x1\0\0\0\0\0\0\0\0\0\0\0\vh\x1\0\0\0\x4\0\0\0\x6\0\0\0)\0\0\0\x5\0\0\0)\0\0\0\b\0\0\0)\0\0\0\x3\0\0\0)\0\0\x5\xd5\0\0\0\v\x1\x1\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0#\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\v\0\0\x1\xb2\0\0\0\x1\0\0\0\0\0\0\0P\0\0\0\x1\0\0\0\0\0\0\0-\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x41\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x37\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\xa7\0\0\0\x1\0\0\0\0\0\0\x2\x87\0\0\0\x1\0\0\0\0\0\0\x3\xe8\x1\0\0\x2\x87)
SettingsDialog_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x5\x44\0\0\x1\xc7\0\0\a\x8f\0\0\x3\xd2\0\0\x5\x45\0\0\x1\xe6\0\0\a\x8e\0\0\x3\xd1\0\0\0\0\0\0\0\0\n\0\0\0\x5\x45\0\0\x1\xe6\0\0\a\x8e\0\0\x3\xd1)
EditExecutablesDialog_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x3\x8b\0\0\x1x\0\0\x6\xf2\0\0\x3\x96\0\0\x3\x8b\0\0\x1x\0\0\x6\xf2\0\0\x3\x96\0\0\0\0\0\0\0\0\n\0\0\0\x3\x8b\0\0\x1x\0\0\x6\xf2\0\0\x3\x96)
MainWindow_docks_logDock_size=164
MainWindow_menuBar_visibility=true
MainWindow_statusBar_visibility=true
MainWindow_toolBar_visibility=true
toolbar_size=@Size(42 36)
toolbar_button_style=0
MainWindow_splitter_state=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x3\xf3\0\0\x2\xb0\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
MainWindow_categoriesSplitter_state=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1\b\0\0\x3\x96\0\xff\xff\xff\xff\x1\0\0\0\x1\0)
MainWindow_monitor=0
MainWindow_categoriesGroup_visibility=false
MainWindow_dataTree_state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2X\0\0\0\x5\x1\x1\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x5\0\0\0\xc8\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64)
ProblemsDialog_geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x3\xe1\0\0\x2\v\0\0\x6\x1e\0\0\x3\x82\0\0\x3\xe1\0\0\x2\v\0\0\x6\x1e\0\0\x3\x82\0\0\0\0\0\0\0\0\n\0\0\0\x3\xe1\0\0\x2\v\0\0\x6\x1e\0\0\x3\x82)
[recentDirectories]
size=2
1\name=editExecutableBinary
1\directory=C:/Modlists/Living Skyrim 2/mods/BodySlide and Outfit Studio/CalienteTools/BodySlide
2\name=extractBSA
2\directory=C:/Living Skyrim 2/mods/Apophysis Dragon Priest Masks SE
[customExecutables]
size=16
1\arguments=
1\binary=C:/Steam_SUBS/steamapps/common/Skyrim Special Edition/skse64_loader.exe
1\hide=false
1\ownicon=true
1\steamAppID=
1\title=SKSE
1\toolbar=false
1\workingDirectory=
2\arguments=
2\binary=C:/Steam/steamapps/common/Skyrim Special Edition/SkyrimSE.exe
2\hide=false
2\ownicon=true
2\steamAppID=
2\title=Skyrim Special Edition
2\toolbar=false
2\workingDirectory=
3\arguments=
3\binary=C:/Steam/steamapps/common/Skyrim Special Edition/SkyrimSELauncher.exe
3\hide=false
3\ownicon=true
3\steamAppID=
3\title=Skyrim Special Edition Launcher
3\toolbar=false
3\workingDirectory=
4\arguments=
4\binary=C:/Steam/steamapps/common/Skyrim Special Edition/CreationKit.exe
4\hide=false
4\ownicon=true
4\steamAppID=
4\title=Creation Kit
4\toolbar=true
4\workingDirectory=C:/Steam/steamapps/common/Skyrim Special Edition
5\arguments=\"C:\\Steam_subs\\steamapps\\common\\Skyrim Special Edition\\data\"
5\binary=C:/Living Skyrim 2/explorer++/Explorer++.exe
5\hide=false
5\ownicon=true
5\steamAppID=
5\title=Explore Virtual Folder
5\toolbar=false
5\workingDirectory=C:/Living Skyrim 2/explorer++
6\arguments=
6\binary=C:/Modlists/Living Skyrim 2/tools/SSEEdit/SSEEdit64.exe
6\hide=false
6\ownicon=false
6\steamAppID=
6\title=SSEEdit
6\toolbar=true
6\workingDirectory=
7\arguments=
7\binary=C:/Modlists/Living Skyrim 2/tools/SSEEdit/SSEEditQuickAutoClean.exe
7\hide=false
7\ownicon=false
7\steamAppID=
7\title=SSEEditQuickAutoClean
7\toolbar=false
7\workingDirectory=
8\arguments=
8\binary=C:/Modlists/Living Skyrim 2/mods/Fores New Idles in Skyrim SE - FNIS SE/tools/GenerateFNIS_for_Users/GenerateFNISforUsers.exe
8\hide=false
8\ownicon=false
8\steamAppID=
8\title=GenerateFNISforUsers
8\toolbar=true
8\workingDirectory=
9\arguments=
9\binary=C:/Modlists/Living Skyrim 2/tools/zEdit/zEdit.exe
9\hide=false
9\ownicon=false
9\steamAppID=
9\title=zEdit
9\toolbar=true
9\workingDirectory=
10\arguments=
10\binary=C:/Modlists/Living Skyrim 2/mods/BodySlide and Outfit Studio/CalienteTools/BodySlide/BodySlide x64.exe
10\hide=false
10\ownicon=false
10\steamAppID=
10\title=BodySlide x64
10\toolbar=false
10\workingDirectory=
11\arguments="--game=\"Skyrim Special Edition\""
11\binary=C:/Program Files (x86)/LOOT/Loot.exe
11\hide=false
11\ownicon=true
11\steamAppID=
11\title=LOOT
11\toolbar=false
11\workingDirectory=C:/Program Files (x86)/LOOT
12\arguments=
12\binary=C:/Modlists/Living Skyrim 2/tools/Mopy/Wrye Bash.exe
12\hide=false
12\ownicon=false
12\steamAppID=
12\title=Wrye Bash
12\toolbar=true
12\workingDirectory=
13\arguments=
13\binary=C:/Modlists/Living Skyrim 2/tools/NifOptimizer/SSE NIF Optimizer.exe
13\hide=false
13\ownicon=false
13\steamAppID=
13\title=SSE NIF Optimizer
13\toolbar=false
13\workingDirectory=
14\arguments=" -sse -o:\"C:\\SSELODGen\""
14\binary=C:/Modlists/Living Skyrim 2/tools/xLODGen/xLODGenx64.exe
14\hide=false
14\ownicon=false
14\steamAppID=
14\title=xLODGenx64
14\toolbar=false
14\workingDirectory=
15\arguments=-sse
15\binary=C:/Modlists/Living Skyrim 2/tools/DynDOLOD/DynDOLODx64.exe
15\hide=false
15\ownicon=false
15\steamAppID=
15\title=DynDOLODx64
15\toolbar=false
15\workingDirectory=
16\arguments=-sse
16\binary=C:/Modlists/Living Skyrim 2/tools/DynDOLOD/TexGenx64.exe
16\hide=false
16\ownicon=false
16\steamAppID=
16\title=TexGenx64
16\toolbar=false
16\workingDirectory=
[PluginPersistance]
Python%20Proxy\tryInit=false
[Widgets]
SettingsDialog_tabWidget_index=0
MainWindow_groupCombo_index=0
MainWindow_executablesListBox_index=1
MainWindow_filtersSeparators_index=0
MainWindow_dataTabShowOnlyConflicts_checked=false
MainWindow_dataTabShowFromArchives_checked=false
[Settings]
language=en
style=Paper Dark by 6788.qss
overwrittenLooseFilesColor=@Variant(\0\0\0\x43\x1@@\0\0\xff\xff\0\0\0\0)
overwritingLooseFilesColor=@Variant(\0\0\0\x43\x1@@\xff\xff\0\0\0\0\0\0)
overwrittenArchiveFilesColor=@Variant(\0\0\0\x43\x1@@\0\0\xff\xff\xff\xff\0\0)
overwritingArchiveFilesColor=@Variant(\0\0\0\x43\x1@@\xff\xff\0\0\xff\xff\0\0)
containsPluginColor=@Variant(\0\0\0\x43\x1@@\0\0\0\0\xff\xff\0\0)
containedColor=@Variant(\0\0\0\x43\x1@@\0\0\0\0\xff\xff\0\0)
center_dialogs=false
show_change_game_confirmation=true
double_click_previews=true
compact_downloads=false
meta_downloads=false
check_for_updates=true
use_prereleases=false
colorSeparatorScrollbars=true
log_level=1
crash_dumps_type=1
crash_dumps_max=5
loot_log_level=2
offline_mode=false
use_proxy=false
endorsement_integration=true
hide_api_counter=false
load_mechanism=0
hide_unchecked_plugins=false
force_enable_core_files=true
display_foreign=true
lock_gui=true
archive_parsing_experimental=false
executable_blacklist="Chrome.exe;Firefox.exe;TSVNCache.exe;TGitCache.exe;Steam.exe;GameOverlayUI.exe;Discord.exe;GalaxyClient.exe;Spotify.exe"
filter_regex=false
regex_case_sensitive=false
regex_extended=false
filter_scroll_to_selection=false
[Servers]
size=8
1\name=Paris
1\premium=true
1\lastSeen=2020-10-21
1\preferred=0
1\lastDownloads=
2\name=Amsterdam
2\premium=true
2\lastSeen=2020-10-21
2\preferred=0
2\lastDownloads=
3\name=Prague
3\premium=true
3\lastSeen=2020-10-21
3\preferred=0
3\lastDownloads=
4\name=Chicago
4\premium=true
4\lastSeen=2020-10-21
4\preferred=0
4\lastDownloads=
5\name=Los Angeles
5\premium=true
5\lastSeen=2020-10-21
5\preferred=0
5\lastDownloads=
6\name=Miami
6\premium=true
6\lastSeen=2020-10-21
6\preferred=0
6\lastDownloads=
7\name=Singapore
7\premium=true
7\lastSeen=2020-10-21
7\preferred=0
7\lastDownloads=
8\name=Nexus CDN
8\premium=false
8\lastSeen=2020-10-21
8\preferred=1
8\lastDownloads=41942833
[Plugins]
BSA%20Extractor\enabled=false
BSA%20Extractor\only_alternate_source=false
BSA%20Packer\blacklisted_files=".txt;.hkx;.xml;.ini"
BSA%20Packer\create_plugins=false
BSA%20Packer\enabled=false
BSA%20Packer\hide_loose_assets=false
Basic%20diagnosis%20plugin\check_alternategames=false
Basic%20diagnosis%20plugin\check_conflict=true
Basic%20diagnosis%20plugin\check_errorlog=true
Basic%20diagnosis%20plugin\check_fileattributes=false
Basic%20diagnosis%20plugin\check_font=true
Basic%20diagnosis%20plugin\check_missingmasters=true
Basic%20diagnosis%20plugin\check_overwrite=true
Basic%20diagnosis%20plugin\ow_ignore_empty=false
Basic%20diagnosis%20plugin\ow_ignore_log=false
Configurator\enabled=false
DDS%20Preview%20Plugin\background%20a=0
DDS%20Preview%20Plugin\background%20b=0
DDS%20Preview%20Plugin\background%20g=0
DDS%20Preview%20Plugin\background%20r=0
DDS%20Preview%20Plugin\log%20gl%20errors=false
FNIS%20Checker\enabled=false
FNIS%20Checker\sensitive=false
FNIS%20Integration%20Tool\enabled=true
FNIS%20Integration%20Tool\fnis-path=
FNIS%20Integration%20Tool\initialised=false
FNIS%20Integration%20Tool\output-logs-path=
FNIS%20Integration%20Tool\output-logs-to-mod=true
FNIS%20Integration%20Tool\output-path=
FNIS%20Integration%20Tool\output-to-mod=true
Fomod%20Installer\enabled=true
Fomod%20Installer\prefer=true
Fomod%20Installer\see_disabled_mods=false
Fomod%20Installer\use_any_file=false
Fomod%20Installer%20C%23\enabled=true
Fomod%20Installer%20C%23\prefer=true
Form%2043%20Plugin%20Checker\enabled=true
INI%20Editor\associated=true
INI%20Editor\external=false
Merge%20Plugins%20Hide\enabled=true
Merge%20Plugins%20Hide\hide-type=mohidden
Merge%20Plugins%20Hide\only-active-mods=true
Preview%20Base\blacklisted_extensions=
Preview%20Base\enabled=true
Preview%20Bsa\enabled=true
Python%20Proxy\enabled=true
Python%20Proxy\python_dir=
Script%20Extender%20Plugin%20Load%20Checker\enabled=true
Simple%20Installer\enabled=true
Simple%20Installer\silent=false
Sync%20Mod%20Order\enabled=true
[pluginBlacklist]
size=0

View File

@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Compression.BSA;
using Wabbajack.Common;
using Wabbajack.Lib;
using Wabbajack.Lib.CompilationSteps;
using Wabbajack.Lib.CompilationSteps.CompilationErrors;
using Xunit;
using Xunit.Abstractions;
@ -652,5 +653,30 @@ namespace Wabbajack.Test
await utils.InstallPath.Combine("SkyrimSE.exe").FileHashAsync());
}
[Fact]
public async Task IniFilesRemapAsExpected()
{
var file1 = await @"Resources\test_ini01.ini".RelativeTo(AbsolutePath.EntryPoint).ReadAllTextAsync();
ACompiler compiler = new NativeCompiler(new NativeCompilerSettings()
{
CompilingGame = Game.SkyrimSpecialEdition,
}, sourcePath: (AbsolutePath)@"C:/Modlists/Living Skyrim 2/",
downloadsPath: AbsolutePath.EntryPoint,
AbsolutePath.EntryPoint);
var gamePath = Game.SkyrimSpecialEdition.MetaData().GameLocation().Normalize();
file1 = file1.Replace(@"C:\\Steam_SUBS\\steamapps\\common\\Skyrim Special Edition", gamePath.Replace(@"\", @"\\"), StringComparison.InvariantCultureIgnoreCase);
file1 = file1.Replace(@"C:\Steam_SUBS\steamapps\common\Skyrim Special Edition", gamePath, StringComparison.InvariantCultureIgnoreCase);
file1 = file1.Replace("C:/Steam_SUBS/steamapps/common/Skyrim Special Edition", gamePath.Replace(@"\", "/"), StringComparison.InvariantCultureIgnoreCase);
var newData = IncludeStubbedConfigFiles.RemapData(compiler, string.Join("\n", file1));
var ini = newData.LoadIniString().customExecutables;
Assert.Equal($"{Consts.GAME_PATH_MAGIC_FORWARD}/skse64_loader.exe", ini[@"1\binary"]);
Assert.Equal($"\\\"{Consts.GAME_PATH_MAGIC_DOUBLE_BACK}\\\\data\\\"", ini[@"5\arguments"]);
Assert.Equal($"{Consts.MO2_PATH_MAGIC_FORWARD}/mods/Fores New Idles in Skyrim SE - FNIS SE/tools/GenerateFNIS_for_Users/GenerateFNISforUsers.exe", ini[@"8\binary"]);
}
}
}

View File

@ -22,6 +22,9 @@
<None Update="xunit.runner.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Resources\test_ini01.ini">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>