Skip to content

Commit eec20a5

Browse files
committed
Add Windows VisualStudio Installer project
1 parent 5ce2dad commit eec20a5

91 files changed

Lines changed: 1018 additions & 909 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

NetworkCamera.Core/NetworkCamera.Core.csproj

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,28 @@
1010
<NeutralLanguage>en-US</NeutralLanguage>
1111
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
1212
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
13+
<Platforms>AnyCPU;x64;x86</Platforms>
1314
</PropertyGroup>
1415

1516
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
1617
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1718
<WarningsAsErrors />
1819
<CodeAnalysisRuleSet />
20+
<PlatformTarget>AnyCPU</PlatformTarget>
21+
</PropertyGroup>
22+
23+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
24+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
25+
<WarningsAsErrors />
26+
<CodeAnalysisRuleSet />
27+
<PlatformTarget>AnyCPU</PlatformTarget>
28+
</PropertyGroup>
29+
30+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
31+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
32+
<WarningsAsErrors />
33+
<CodeAnalysisRuleSet />
34+
<PlatformTarget>AnyCPU</PlatformTarget>
1935
</PropertyGroup>
2036

2137
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -24,6 +40,18 @@
2440
<CodeAnalysisRuleSet />
2541
</PropertyGroup>
2642

43+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
44+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
45+
<WarningsAsErrors />
46+
<CodeAnalysisRuleSet />
47+
</PropertyGroup>
48+
49+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
50+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
51+
<WarningsAsErrors />
52+
<CodeAnalysisRuleSet />
53+
</PropertyGroup>
54+
2755
<ItemGroup>
2856
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7">
2957
<PrivateAssets>all</PrivateAssets>

NetworkCamera.Device/DevicesViewModel.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,13 @@ internal bool DoDeleteDevice(DeviceViewModel device)
7272
return Devices.Remove(device);
7373
}
7474

75-
public bool Read(string fileName)
75+
public bool Read(string fileName, string defaultFilename)
7676
{
7777
if (!File.Exists(fileName))
78-
return false;
78+
{
79+
fileName = defaultFilename;
80+
if (!File.Exists(fileName)) return false;
81+
}
7982

8083
try
8184
{
@@ -102,7 +105,7 @@ public bool Save(string fileName)
102105
DataToModel();
103106

104107
using StreamWriter file = File.CreateText(fileName);
105-
JsonSerializer serializer = new JsonSerializer();
108+
JsonSerializer serializer = new JsonSerializer { Formatting = Formatting.Indented };
106109
serializer.Serialize(file, Model);
107110
return true;
108111
}

NetworkCamera.Device/NetworkCamera.Device.csproj

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<NeutralLanguage>en-US</NeutralLanguage>
66
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
77
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
8+
<Platforms>AnyCPU;x64;x86</Platforms>
89
</PropertyGroup>
910

1011
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
@@ -13,12 +14,36 @@
1314
<CodeAnalysisRuleSet></CodeAnalysisRuleSet>
1415
</PropertyGroup>
1516

17+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
18+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
19+
<WarningsAsErrors />
20+
<CodeAnalysisRuleSet />
21+
</PropertyGroup>
22+
23+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
24+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
25+
<WarningsAsErrors />
26+
<CodeAnalysisRuleSet />
27+
</PropertyGroup>
28+
1629
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
1730
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
1831
<WarningsAsErrors />
1932
<CodeAnalysisRuleSet></CodeAnalysisRuleSet>
2033
</PropertyGroup>
2134

35+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
36+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
37+
<WarningsAsErrors />
38+
<CodeAnalysisRuleSet />
39+
</PropertyGroup>
40+
41+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
42+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
43+
<WarningsAsErrors />
44+
<CodeAnalysisRuleSet />
45+
</PropertyGroup>
46+
2247
<ItemGroup>
2348
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7">
2449
<PrivateAssets>all</PrivateAssets>

NetworkCamera.Main/MainViewModel.cs

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ public MainViewModel(
4545
Messenger.Default.Register<NotificationMessage>(this, OnStatusMessage);
4646

4747
// Set working directory
48-
string appData = GetAppDataFolder();
49-
Directory.SetCurrentDirectory(appData);
48+
string userData = GetUserDataFolder();
49+
Directory.SetCurrentDirectory(userData);
5050

5151
// Read configuration
52-
ReadConfigAsync(appData);
52+
ReadConfigAsync(userData);
5353
}
5454

5555
public RelayCommand SaveCommand { get; }
@@ -75,24 +75,33 @@ public string StatusMessage
7575

7676
public void SaveAll()
7777
{
78-
string appData = GetAppDataFolder();
78+
string appData = GetUserDataFolder();
7979
SaveConfig(appData);
8080
}
8181

82-
private void OnStatusMessage(NotificationMessage message)
82+
public static string GetAppDataFolder()
8383
{
84-
StatusMessage = message.Notification;
85-
if (string.IsNullOrWhiteSpace(message.Notification))
86-
return;
84+
string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
85+
GetAssemblyInfo(out string company, out string product);
86+
string path = Path.Combine(appData, company, product);
87+
Directory.CreateDirectory(path);
88+
return path;
8789
}
8890

89-
private static string GetAppDataFolder()
91+
public static string GetUserDataFolder()
9092
{
91-
string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
93+
string userData = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
94+
GetAssemblyInfo(out string company, out string product);
95+
string path = Path.Combine(userData, company, product);
96+
Directory.CreateDirectory(path);
97+
return path;
98+
}
9299

100+
private static void GetAssemblyInfo(out string company, out string product)
101+
{
93102
Assembly assembly = Assembly.GetEntryAssembly();
94-
string company = string.Empty;
95-
string product = string.Empty;
103+
company = string.Empty;
104+
product = string.Empty;
96105
object[] companyAttributes = assembly.GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
97106
if ((companyAttributes != null) && (companyAttributes.Length > 0))
98107
{
@@ -104,19 +113,24 @@ private static string GetAppDataFolder()
104113
{
105114
product = ((AssemblyProductAttribute)productAttributes[0]).Product;
106115
}
116+
}
107117

108-
string path = Path.Combine(appData, company, product);
109-
Directory.CreateDirectory(path);
110-
return path;
118+
private void OnStatusMessage(NotificationMessage message)
119+
{
120+
StatusMessage = message.Notification;
121+
if (string.IsNullOrWhiteSpace(message.Notification))
122+
return;
111123
}
112124

113125
private void ReadConfigAsync(string appData)
114126
{
127+
string contentFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data");
115128
try
116129
{
117130
IsBusy = true;
118-
SettingsViewModel.Read(Path.Combine(appData, "Settings.json"));
119-
DevicesViewModel.Read(Path.Combine(appData, "Devices.json"));
131+
132+
SettingsViewModel.Read(Path.Combine(appData, "Settings.json"), Path.Combine(contentFolder, "Settings.json"));
133+
DevicesViewModel.Read(Path.Combine(appData, "Devices.json"), Path.Combine(contentFolder, "Devices.json"));
120134
}
121135
finally
122136
{

NetworkCamera.Main/NetworkCamera.Main.csproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,28 @@
1010
<Version>1.0.0</Version>
1111
<Authors>Capnode AB</Authors>
1212
<RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
13+
<Platforms>AnyCPU;x64;x86</Platforms>
1314
</PropertyGroup>
1415

1516
<ItemGroup>
1617
<None Remove=".editorconfig" />
18+
<None Remove="Data\Devices.json" />
19+
<None Remove="Data\Settings.json" />
1720
</ItemGroup>
1821

1922
<ItemGroup>
2023
<AdditionalFiles Include=".editorconfig" />
2124
</ItemGroup>
2225

26+
<ItemGroup>
27+
<Content Include="Data\Devices.json">
28+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
29+
</Content>
30+
<Content Include="Data\Settings.json">
31+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
32+
</Content>
33+
</ItemGroup>
34+
2335
<ItemGroup>
2436
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.7">
2537
<PrivateAssets>all</PrivateAssets>
@@ -50,4 +62,8 @@
5062
</EmbeddedResource>
5163
</ItemGroup>
5264

65+
<ItemGroup>
66+
<Folder Include="Resources\" />
67+
</ItemGroup>
68+
5369
</Project>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<PackagingLayoutTemplate xmlns="http://schemas.microsoft.com/appx/makeappx/2017">
3+
4+
<GeneratedPackageFamily ID="pf-{BundleArchitectures}" FileName="{PackageId}_{Version}_{BundleArchitectures}.{PackageExtPrefix}bundle" FlatBundle="true" ManifestPath="{AppxManifestPath}" ResourceManager="false" Encrypt="false">
5+
6+
<GeneratedPackage ID="{PackageArchitecture}" FileName="{PackageId}_{Version}_{PackageArchitecture}.{PackageExtPrefix}" ProcessorArchitecture="{PackageArchitecture}" ManifestPath="{AppxManifestPath}" Encrypt="false" Compress="true">
7+
<GeneratedFiles/>
8+
<GeneratedResources/>
9+
</GeneratedPackage>
10+
11+
<GeneratedResourcePackage ID="{ResourceId}" FileName="{PackageId}_{Version}_{ResourceId}.{PackageExtPrefix}" AllowExecution="false" ManifestPath="{AppxManifestPath}" Encrypt="false" Compress="false">
12+
<GeneratedFiles/>
13+
<GeneratedResources/>
14+
</GeneratedResourcePackage>
15+
16+
<GeneratedAssetPackage ID="Assets" FileName="{PackageId}_{Version}_Assets.{PackageExtPrefix}" AllowExecution="false" ManifestPath="{AppxManifestPath}" Encrypt="false" Compress="false">
17+
<GeneratedFiles/>
18+
</GeneratedAssetPackage>
19+
20+
</GeneratedPackageFamily>
21+
22+
</PackagingLayoutTemplate>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<AppInstaller DisplayName="NetworkCamera.Package" IsBundle="true" Version="1.0.1.0" DisplayPublisher="Capnode" SupportedArchitectures="x64" OutputFolder="C:\Source\NetworkCamera\NetworkCamera.Package\AppPackages\" Description="NetworkCamera.Package" MinOS="10.0.17763.0" CertificateUri="file:///C:/Source/NetworkCamera/Installer/NetworkCamera.Package_1.0.1.0_Test/NetworkCamera.Package_1.0.1.0_x64.cer" PackageUri="file:///C:/Source/NetworkCamera/Installer/NetworkCamera.Package_1.0.1.0_Test/NetworkCamera.Package_1.0.1.0_x64.msixbundle" AppInstallerFile="file:///C:/Source/NetworkCamera/Installer/NetworkCamera.Package.appinstaller" LogoPath="C:\Source\NetworkCamera\NetworkCamera.Package\Images\StoreLogo.png" TileColor="transparent" />

NetworkCamera.Package/BundleArtifacts/PackageLayout.xml

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)