Skip to content

Commit 874d9c7

Browse files
committed
first version of tsarev.analyzer.exceptions
1 parent 3eb94a6 commit 874d9c7

File tree

15 files changed

+657
-9
lines changed

15 files changed

+657
-9
lines changed

HardcodeAnalyzer.sln

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tsarev.Analyzer.Hardcode.Em
3737
EndProject
3838
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tsarev.Analyzer.Hardcode.Email.Test", "Tsarev.Analyzer.Hardcode.Email.Test\Tsarev.Analyzer.Hardcode.Email.Test.csproj", "{4E74A79F-74BC-49CF-9330-C1EAFCE07E42}"
3939
EndProject
40+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tsarev.Analyzer.Exceptions", "Tsarev.Analyzer.Exceptions\Tsarev.Analyzer.Exceptions.csproj", "{0F926142-4EEB-4E12-805A-F0963AB2F6BE}"
41+
EndProject
42+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tsarev.Analyzer.Exceptions.Test", "Tsarev.Analyzer.Exceptions.Test\Tsarev.Analyzer.Exceptions.Test.csproj", "{F0C90254-A7B4-4CD2-B7D9-CA2B3770FCB2}"
43+
EndProject
4044
Global
4145
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4246
Debug|Any CPU = Debug|Any CPU
@@ -91,6 +95,14 @@ Global
9195
{4E74A79F-74BC-49CF-9330-C1EAFCE07E42}.Debug|Any CPU.Build.0 = Debug|Any CPU
9296
{4E74A79F-74BC-49CF-9330-C1EAFCE07E42}.Release|Any CPU.ActiveCfg = Release|Any CPU
9397
{4E74A79F-74BC-49CF-9330-C1EAFCE07E42}.Release|Any CPU.Build.0 = Release|Any CPU
98+
{0F926142-4EEB-4E12-805A-F0963AB2F6BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
99+
{0F926142-4EEB-4E12-805A-F0963AB2F6BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
100+
{0F926142-4EEB-4E12-805A-F0963AB2F6BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
101+
{0F926142-4EEB-4E12-805A-F0963AB2F6BE}.Release|Any CPU.Build.0 = Release|Any CPU
102+
{F0C90254-A7B4-4CD2-B7D9-CA2B3770FCB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
103+
{F0C90254-A7B4-4CD2-B7D9-CA2B3770FCB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
104+
{F0C90254-A7B4-4CD2-B7D9-CA2B3770FCB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
105+
{F0C90254-A7B4-4CD2-B7D9-CA2B3770FCB2}.Release|Any CPU.Build.0 = Release|Any CPU
94106
EndGlobalSection
95107
GlobalSection(SolutionProperties) = preSolution
96108
HideSolutionNode = FALSE
@@ -107,4 +119,7 @@ Global
107119
{F75815ED-B3B6-4A9B-B06E-9625B8F4D13A} = {06D9E499-7167-4C8F-A6EC-3A1390C0F79E}
108120
{4E74A79F-74BC-49CF-9330-C1EAFCE07E42} = {06D9E499-7167-4C8F-A6EC-3A1390C0F79E}
109121
EndGlobalSection
122+
GlobalSection(ExtensibilityGlobals) = postSolution
123+
SolutionGuid = {258BBC45-DDE4-4FD5-A63C-52D794F3BDD3}
124+
EndGlobalSection
110125
EndGlobal
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using Microsoft.CodeAnalysis;
2+
using Microsoft.CodeAnalysis.Diagnostics;
3+
using Tsarev.Analyzer.TestHelpers;
4+
using Xunit;
5+
6+
namespace Tsarev.Analyzer.Exceptions.Test
7+
{
8+
public class ExceptionTest : DiagnosticVerifier
9+
{
10+
[Fact]
11+
public void TestEmpty()
12+
{
13+
var test = @"";
14+
15+
VerifyCSharpDiagnostic(test);
16+
}
17+
18+
[Fact]
19+
public void TestWriteExceptionToLog()
20+
{
21+
var test = @"
22+
class Class {
23+
24+
private void WriteException()
25+
{
26+
var ex = new Exception();
27+
Log.Error(ex.Message);
28+
}
29+
}
30+
";
31+
32+
VerifyCSharpDiagnostic(test, Expect(7, 15));
33+
}
34+
35+
private DiagnosticResult Expect(int line, int column)
36+
=> new DiagnosticResult
37+
{
38+
Id = nameof(ExceptionsAnalyzer),
39+
Message = "Exception data is swalloved. Consider to log exception object instead of just exception.Message",
40+
Severity = DiagnosticSeverity.Warning,
41+
Locations =
42+
new[]
43+
{
44+
new DiagnosticResultLocation("Test0.cs", line, column)
45+
}
46+
};
47+
48+
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer() => new ExceptionsAnalyzer();
49+
}
50+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using System.Reflection;
2+
using System.Runtime.InteropServices;
3+
4+
[assembly: AssemblyTitle("Tsarev.Analyzer.Exceptions.Test")]
5+
[assembly: AssemblyDescription("")]
6+
[assembly: AssemblyConfiguration("")]
7+
[assembly: AssemblyCompany("")]
8+
[assembly: AssemblyProduct("Tsarev.Analyzer.Exceptions.Test")]
9+
[assembly: AssemblyCopyright("Copyright © 2018")]
10+
[assembly: AssemblyTrademark("")]
11+
[assembly: AssemblyCulture("")]
12+
13+
[assembly: ComVisible(false)]
14+
15+
[assembly: Guid("f0c90254-a7b4-4cd2-b7d9-ca2b3770fcb2")]
16+
17+
// [assembly: AssemblyVersion("1.0.*")]
18+
[assembly: AssemblyVersion("1.0.0.0")]
19+
[assembly: AssemblyFileVersion("1.0.0.0")]
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<Import Project="..\packages\xunit.core.2.3.1\build\xunit.core.props" Condition="Exists('..\packages\xunit.core.2.3.1\build\xunit.core.props')" />
4+
<Import Project="..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props')" />
5+
<PropertyGroup>
6+
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
7+
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
8+
<ProjectGuid>{F0C90254-A7B4-4CD2-B7D9-CA2B3770FCB2}</ProjectGuid>
9+
<OutputType>Library</OutputType>
10+
<AppDesignerFolder>Properties</AppDesignerFolder>
11+
<RootNamespace>Tsarev.Analyzer.Exceptions.Test</RootNamespace>
12+
<AssemblyName>Tsarev.Analyzer.Exceptions.Test</AssemblyName>
13+
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
14+
<FileAlignment>512</FileAlignment>
15+
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
16+
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
17+
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
18+
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
19+
<IsCodedUITest>False</IsCodedUITest>
20+
<TestProjectType>UnitTest</TestProjectType>
21+
<NuGetPackageImportStamp>
22+
</NuGetPackageImportStamp>
23+
</PropertyGroup>
24+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
25+
<DebugSymbols>true</DebugSymbols>
26+
<DebugType>full</DebugType>
27+
<Optimize>false</Optimize>
28+
<OutputPath>bin\Debug\</OutputPath>
29+
<DefineConstants>DEBUG;TRACE</DefineConstants>
30+
<ErrorReport>prompt</ErrorReport>
31+
<WarningLevel>4</WarningLevel>
32+
</PropertyGroup>
33+
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
34+
<DebugType>pdbonly</DebugType>
35+
<Optimize>true</Optimize>
36+
<OutputPath>bin\Release\</OutputPath>
37+
<DefineConstants>TRACE</DefineConstants>
38+
<ErrorReport>prompt</ErrorReport>
39+
<WarningLevel>4</WarningLevel>
40+
</PropertyGroup>
41+
<ItemGroup>
42+
<Reference Include="Microsoft.CodeAnalysis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
43+
<HintPath>..\packages\Microsoft.CodeAnalysis.Common.1.0.1\lib\net45\Microsoft.CodeAnalysis.dll</HintPath>
44+
</Reference>
45+
<Reference Include="Microsoft.CodeAnalysis.CSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
46+
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.1.0.1\lib\net45\Microsoft.CodeAnalysis.CSharp.dll</HintPath>
47+
</Reference>
48+
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
49+
<HintPath>..\packages\Microsoft.CodeAnalysis.CSharp.Workspaces.1.0.1\lib\net45\Microsoft.CodeAnalysis.CSharp.Workspaces.dll</HintPath>
50+
</Reference>
51+
<Reference Include="Microsoft.CodeAnalysis.Workspaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
52+
<HintPath>..\packages\Microsoft.CodeAnalysis.Workspaces.Common.1.0.1\lib\net452\Microsoft.CodeAnalysis.Workspaces.dll</HintPath>
53+
</Reference>
54+
<Reference Include="Microsoft.CodeAnalysis.Workspaces.Desktop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
55+
<HintPath>..\packages\Microsoft.CodeAnalysis.Workspaces.Common.1.0.1\lib\net452\Microsoft.CodeAnalysis.Workspaces.Desktop.dll</HintPath>
56+
</Reference>
57+
<Reference Include="System" />
58+
<Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
59+
<HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
60+
<Private>True</Private>
61+
</Reference>
62+
<Reference Include="System.Composition.AttributedModel, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
63+
<HintPath>..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.AttributedModel.dll</HintPath>
64+
</Reference>
65+
<Reference Include="System.Composition.Convention, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
66+
<HintPath>..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.Convention.dll</HintPath>
67+
</Reference>
68+
<Reference Include="System.Composition.Hosting, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
69+
<HintPath>..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.Hosting.dll</HintPath>
70+
</Reference>
71+
<Reference Include="System.Composition.Runtime, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
72+
<HintPath>..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.Runtime.dll</HintPath>
73+
</Reference>
74+
<Reference Include="System.Composition.TypedParts, Version=1.0.27.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
75+
<HintPath>..\packages\Microsoft.Composition.1.0.27\lib\portable-net45+win8+wp8+wpa81\System.Composition.TypedParts.dll</HintPath>
76+
</Reference>
77+
<Reference Include="System.Core" />
78+
<Reference Include="System.Reflection.Metadata, Version=1.0.21.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
79+
<HintPath>..\packages\System.Reflection.Metadata.1.0.21\lib\portable-net45+win8\System.Reflection.Metadata.dll</HintPath>
80+
</Reference>
81+
<Reference Include="xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
82+
<HintPath>..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll</HintPath>
83+
</Reference>
84+
<Reference Include="xunit.assert, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
85+
<HintPath>..\packages\xunit.assert.2.3.1\lib\netstandard1.1\xunit.assert.dll</HintPath>
86+
</Reference>
87+
<Reference Include="xunit.core, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
88+
<HintPath>..\packages\xunit.extensibility.core.2.3.1\lib\netstandard1.1\xunit.core.dll</HintPath>
89+
</Reference>
90+
<Reference Include="xunit.execution.desktop, Version=2.3.1.3858, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
91+
<HintPath>..\packages\xunit.extensibility.execution.2.3.1\lib\net452\xunit.execution.desktop.dll</HintPath>
92+
</Reference>
93+
</ItemGroup>
94+
<ItemGroup>
95+
<Compile Include="ExceptionTest.cs" />
96+
<Compile Include="Properties\AssemblyInfo.cs" />
97+
</ItemGroup>
98+
<ItemGroup>
99+
<None Include="packages.config" />
100+
</ItemGroup>
101+
<ItemGroup>
102+
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.Analyzers.dll" />
103+
<Analyzer Include="..\packages\Microsoft.CodeAnalysis.Analyzers.1.1.0\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.Analyzers.dll" />
104+
<Analyzer Include="..\packages\xunit.analyzers.0.8.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
105+
</ItemGroup>
106+
<ItemGroup>
107+
<ProjectReference Include="..\Tsarev.Analyzer.Exceptions\Tsarev.Analyzer.Exceptions.csproj">
108+
<Project>{0f926142-4eeb-4e12-805a-f0963ab2f6be}</Project>
109+
<Name>Tsarev.Analyzer.Exceptions</Name>
110+
</ProjectReference>
111+
<ProjectReference Include="..\Tsarev.Analyzer.TestHelpers\Tsarev.Analyzer.TestHelpers.csproj">
112+
<Project>{7ef60ad1-739b-4f59-a4c9-df70be016461}</Project>
113+
<Name>Tsarev.Analyzer.TestHelpers</Name>
114+
</ProjectReference>
115+
</ItemGroup>
116+
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
117+
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
118+
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
119+
<PropertyGroup>
120+
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
121+
</PropertyGroup>
122+
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props'))" />
123+
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets'))" />
124+
<Error Condition="!Exists('..\packages\xunit.core.2.3.1\build\xunit.core.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\xunit.core.2.3.1\build\xunit.core.props'))" />
125+
<Error Condition="!Exists('..\packages\xunit.core.2.3.1\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\xunit.core.2.3.1\build\xunit.core.targets'))" />
126+
</Target>
127+
<Import Project="..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.targets')" />
128+
<Import Project="..\packages\xunit.core.2.3.1\build\xunit.core.targets" Condition="Exists('..\packages\xunit.core.2.3.1\build\xunit.core.targets')" />
129+
</Project>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<packages>
3+
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.1.0" targetFramework="net461" />
4+
<package id="Microsoft.CodeAnalysis.Common" version="1.0.1" targetFramework="net461" />
5+
<package id="Microsoft.CodeAnalysis.CSharp" version="1.0.1" targetFramework="net461" />
6+
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="1.0.1" targetFramework="net461" />
7+
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="1.0.1" targetFramework="net461" />
8+
<package id="Microsoft.Composition" version="1.0.27" targetFramework="net461" />
9+
<package id="MSTest.TestAdapter" version="1.2.0" targetFramework="net461" />
10+
<package id="MSTest.TestFramework" version="1.2.0" targetFramework="net461" />
11+
<package id="System.Collections.Immutable" version="1.1.36" targetFramework="net461" />
12+
<package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net461" />
13+
<package id="xunit" version="2.3.1" targetFramework="net461" />
14+
<package id="xunit.abstractions" version="2.0.1" targetFramework="net461" />
15+
<package id="xunit.analyzers" version="0.8.0" targetFramework="net461" />
16+
<package id="xunit.assert" version="2.3.1" targetFramework="net461" />
17+
<package id="xunit.core" version="2.3.1" targetFramework="net461" />
18+
<package id="xunit.extensibility.core" version="2.3.1" targetFramework="net461" />
19+
<package id="xunit.extensibility.execution" version="2.3.1" targetFramework="net461" />
20+
</packages>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using System.Collections.Immutable;
2+
using Microsoft.CodeAnalysis;
3+
using Microsoft.CodeAnalysis.CSharp;
4+
using Microsoft.CodeAnalysis.CSharp.Syntax;
5+
using Microsoft.CodeAnalysis.Diagnostics;
6+
using Tsarev.Analyzer.Helpers;
7+
8+
namespace Tsarev.Analyzer.Exceptions
9+
{
10+
[DiagnosticAnalyzer(LanguageNames.CSharp)]
11+
public class ExceptionsAnalyzer : DiagnosticAnalyzer
12+
{
13+
private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(
14+
nameof(ExceptionsAnalyzer),
15+
"Log exception",
16+
"Exception data is swalloved. Consider to log exception object instead of just exception.Message",
17+
"Debug",
18+
DiagnosticSeverity.Warning,
19+
isEnabledByDefault: true,
20+
description: "Most of loggers could log whole exception object with all properties instead of just string.");
21+
22+
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } = ImmutableArray.Create(Rule, StandartRules.FailedRule);
23+
24+
public override void Initialize(AnalysisContext context) => context.RegisterSafeSyntaxNodeAction(AnalyzeInvoke, SyntaxKind.InvocationExpression);
25+
26+
private static readonly ImmutableHashSet<string> LogMethodNames =
27+
new[] {"Error", "Warn", "Warning", "Info", "Information", "Debug", "Trace"}
28+
.ToImmutableHashSet();
29+
30+
private void AnalyzeInvoke(SyntaxNodeAnalysisContext context)
31+
{
32+
if (!(context.Node is InvocationExpressionSyntax invocation))
33+
{
34+
return;
35+
}
36+
37+
var methodName = invocation.GetMethodName();
38+
39+
if (methodName != null && LogMethodNames.Contains(methodName))
40+
{
41+
foreach (var argument in invocation.ArgumentList.Arguments)
42+
{
43+
if (argument.Expression is MemberAccessExpressionSyntax member)
44+
{
45+
var x = member.Name.Identifier.Text;
46+
if (x == "Message")
47+
{
48+
context.ReportDiagnostic(Diagnostic.Create(Rule, member.GetLocation()));
49+
}
50+
}
51+
}
52+
}
53+
}
54+
}
55+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Reflection;
2+
using System.Runtime.InteropServices;
3+
4+
// General Information about an assembly is controlled through the following
5+
// set of attributes. Change these attribute values to modify the information
6+
// associated with an assembly.
7+
[assembly: AssemblyTitle("VatHardcodeAnalyzer")]
8+
[assembly: AssemblyDescription("")]
9+
[assembly: AssemblyConfiguration("")]
10+
[assembly: AssemblyCompany("Microsoft")]
11+
[assembly: AssemblyProduct("VatHardcodeAnalyzer")]
12+
[assembly: AssemblyCopyright("Copyright © Microsoft 2017")]
13+
[assembly: AssemblyTrademark("")]
14+
[assembly: AssemblyCulture("")]
15+
16+
// Setting ComVisible to false makes the types in this assembly not visible
17+
// to COM components. If you need to access a type in this assembly from
18+
// COM, set the ComVisible attribute to true on that type.
19+
[assembly: ComVisible(false)]
20+
21+
// Version information for an assembly consists of the following four values:
22+
//
23+
// Major Version
24+
// Minor Version
25+
// Build Number
26+
// Revision
27+
//
28+
// You can specify all the values or you can default the Build and Revision Numbers
29+
// by using the '*' as shown below:
30+
[assembly: AssemblyVersion("1.1.*")]
31+
[assembly: AssemblyInformationalVersion("1.1.0")]
32+
[assembly: AssemblyFileVersion("1.1.0")]

0 commit comments

Comments
 (0)