Skip to content

Commit 6ee3ecb

Browse files
authored
Update action.yml
1 parent eb6a58a commit 6ee3ecb

File tree

1 file changed

+85
-13
lines changed

1 file changed

+85
-13
lines changed

action.yml

Lines changed: 85 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,100 @@ runs:
1111
run: |
1212
$ErrorActionPreference = "Stop";
1313
14-
foreach($project in Get-ChildItem -Path . -Filter *.csproj -Recurse -Force) {
15-
dotnet add $project package SecurityCodeScan.VS2019
16-
14+
foreach($project in Get-ChildItem -Path . -Filter *.??proj -Recurse -Force) {
15+
1716
$xml = [xml](Get-Content -Path $project)
17+
if (-not $xml.Project.xmlns) {
18+
dotnet add $project package SecurityCodeScan.VS2019
19+
$xml = [xml](Get-Content -Path $project)
20+
}
21+
else {
22+
$packageId = "SecurityCodeScan.VS2019"
23+
$packageVersion = "5.0.0"
24+
$packages = $project | Split-Path -parent
25+
$packages = Join-Path $packages "packages.config"
1826
19-
$errorLog = $xml.CreateElement("ErrorLog")
20-
$errorLog.set_InnerText("analysis.sarif")
21-
$propertyGroups = $xml.SelectNodes("//Project/PropertyGroup")
22-
$propertyGroups[0].AppendChild($errorLog)
27+
$id = get-random
28+
$code = @"
29+
using System;
30+
using System.Runtime.Versioning;
31+
using System.Text.RegularExpressions;
32+
using System.Xml;
2333
24-
$xml.Save($project)
34+
public class Program$id
35+
{
36+
public static void Main(){
37+
var projXml = new XmlDocument();
38+
projXml.Load(@"$project");
39+
40+
var xmlNamespace = "http://schemas.microsoft.com/developer/msbuild/2003";
41+
var nsmgr = new XmlNamespaceManager(projXml.NameTable);
42+
nsmgr.AddNamespace("x", xmlNamespace);
43+
44+
XmlNode itemGroupNode = projXml.CreateNode(XmlNodeType.Element, "ItemGroup", xmlNamespace);
45+
XmlNode analyzerNode = projXml.CreateNode(XmlNodeType.Element, "Analyzer", xmlNamespace);
46+
XmlAttribute includeAttribute = projXml.CreateAttribute("Include");
47+
includeAttribute.Value = $@"..\packages\$packageId.$packageVersion\analyzers\dotnet\SecurityCodeScan.VS2019.dll";
48+
analyzerNode.Attributes.Append(includeAttribute);
49+
itemGroupNode.AppendChild(analyzerNode);
50+
projXml.SelectSingleNode("//x:Project", nsmgr).AppendChild(itemGroupNode);
51+
projXml.Save(@"$project");
52+
53+
XmlNode targetFrameworkNode = projXml.SelectSingleNode("//x:TargetFrameworkVersion", nsmgr);
54+
var targetFwAttribute = new TargetFrameworkAttribute($".NETFramework, Version={targetFrameworkNode.InnerXml}");
55+
Regex p = new Regex(@"\d+(\.\d+)+");
56+
Match m = p.Match(targetFwAttribute.FrameworkName);
57+
Version targetFwVersion = Version.Parse(m.Value);
58+
59+
var packagesXml = new XmlDocument();
60+
packagesXml.Load(@"$packages");
61+
62+
var packagesNode = packagesXml.SelectSingleNode("//packages");
63+
64+
XmlNode packageNode = packagesXml.CreateElement("package");
65+
66+
XmlAttribute idAttribute = packagesXml.CreateAttribute("id");
67+
idAttribute.Value = "$packageId";
68+
packageNode.Attributes.Append(idAttribute);
69+
70+
XmlAttribute versionAttribute = packagesXml.CreateAttribute("version");
71+
versionAttribute.Value = "$packageVersion";
72+
packageNode.Attributes.Append(versionAttribute);
73+
74+
XmlAttribute targetFrameworkAttribute = packagesXml.CreateAttribute("targetFramework");
75+
targetFrameworkAttribute.Value = $"net{targetFwVersion.ToString().Replace(".", "")}";
76+
packageNode.Attributes.Append(targetFrameworkAttribute);
77+
78+
XmlAttribute developmentDependencyAttribute = packagesXml.CreateAttribute("developmentDependency");
79+
developmentDependencyAttribute.Value = "true";
80+
packageNode.Attributes.Append(developmentDependencyAttribute);
81+
82+
packagesNode.AppendChild(packageNode);
83+
packagesXml.Save(@"$packages");
84+
}
2585
}
86+
"@
2687
27-
foreach($project in Get-ChildItem -Path . -Filter *.vbproj -Recurse -Force) {
28-
dotnet add $project package SecurityCodeScan.VS2019
29-
30-
$xml = [xml](Get-Content -Path $project)
88+
Add-Type -TypeDefinition $code -Language CSharp
89+
Invoke-Expression "[Program$id]::Main()"
90+
}
91+
92+
if ($xml.Project.xmlns) {
93+
$nsmgr = New-Object System.Xml.XmlNamespaceManager $xml.NameTable
94+
$nsmgr.AddNamespace('x','http://schemas.microsoft.com/developer/msbuild/2003')
95+
$x = 'x:'
96+
}
97+
$propertyGroups = $xml.SelectNodes("//${x}Project/${x}PropertyGroup", $nsmgr)
3198
3299
$errorLog = $xml.CreateElement("ErrorLog")
33100
$errorLog.set_InnerText("analysis.sarif")
34-
$propertyGroups = $xml.SelectNodes("//Project/PropertyGroup")
35101
$propertyGroups[0].AppendChild($errorLog)
36102
103+
if (-not $propertyGroups[0].AdditionalFileItemNames) {
104+
$additionalFileItemNamesElt = $xml.CreateElement("AdditionalFileItemNames")
105+
$additionalFileItemNamesElt.set_InnerText('$(AdditionalFileItemNames);Content')
106+
$propertyGroups[0].AppendChild($additionalFileItemNamesElt)
107+
}
108+
37109
$xml.Save($project)
38110
}

0 commit comments

Comments
 (0)