-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
78 lines (67 loc) · 3.36 KB
/
Program.cs
File metadata and controls
78 lines (67 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System.IO;
using System.Linq;
namespace EasyTransformConfig
{
internal class Program
{
public static void Main(string[] args)
{
var files = Directory.GetFiles(Directory.GetCurrentDirectory());
var csprojPath = files.FirstOrDefault(x => x.Contains(".csproj")) ?? "";
if (string.IsNullOrWhiteSpace(csprojPath))
// write an error message
return;
if (!File.Exists("App.config"))
File.WriteAllText("App.config", TextProvider.configContent);
if (!File.Exists("App.Release.config"))
File.WriteAllText("App.Release.config", TextProvider.configContent);
if (!File.Exists("App.Debug.config"))
File.WriteAllText("App.Debug.config", TextProvider.configContent);
var csproj = File.ReadAllText(csprojPath);
var backupName = csprojPath.Insert(csprojPath.LastIndexOf('.'), "_backup");
File.WriteAllText(backupName, csproj);
var AppConfig = "<None Include=\"App.config\"";
if (!csproj.Contains(AppConfig))
csproj = csproj.Insert(csproj.LastIndexOf("<Import"), TextProvider.appConfig);
csproj = csproj.Insert(csproj.LastIndexOf("</Project>"), TextProvider.targets);
File.WriteAllText(csprojPath, csproj);
}
private class TextProvider
{
internal static readonly string appConfig = @"
<ItemGroup>
<None Include=""App.config"" />
<None Include=""App.Debug.config"">
<DependentUpon>App.config</DependentUpon>
</None>
<None Include=""App.Release.config"">
<DependentUpon>App.config</DependentUpon>
</None>
</ItemGroup>
";
internal static readonly string targets = @"
<UsingTask TaskName=""TransformXml"" AssemblyFile=""$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll"" />
<Target Name=""BeforeBuild"" Condition=""Exists('App.$(Configuration).config')"">
<!-- Generate transformed app config and replace it: will get the <runtime> node and assembly bindings properly populated -->
<TransformXml Source=""App.config"" Destination=""App.config"" Transform=""App.$(Configuration).config"" />
</Target>
<Target Name=""AfterBuild"" Condition=""Exists('App.$(Configuration).config')"">
<!-- Generate transformed app config in the intermediate directory: this will transform sections such as appSettings -->
<TransformXml Source=""App.config"" Destination=""$(IntermediateOutputPath)$(TargetFileName).config"" Transform=""App.$(Configuration).config"" />
<!-- Force build process to use the transformed configuration file from now on.-->
<ItemGroup>
<AppConfigWithTargetPath Remove=""App.config"" />
<AppConfigWithTargetPath Include=""$(IntermediateOutputPath)$(TargetFileName).config"">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
";
internal static readonly string configContent = @"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration xmlns:xdt=""http://schemas.microsoft.com/XML-Document-Transform"">
<appSettings>
</appSettings>
</configuration>";
}
}
}