Skip to content

Commit 9e27857

Browse files
Fix getting package references from csproj from multiple item groups (#3603)
* Fix getting package references from csproj from multiple item groups * Add comment
1 parent c17edf5 commit 9e27857

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

src/utils/dotnetUtils.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,32 @@ export namespace dotnetUtils {
128128
}
129129
return result;
130130
}
131+
132+
interface CSProjXml {
133+
Project?: {
134+
ItemGroup?: {
135+
PackageReference?: {
136+
'$': CSProjPackageReference;
137+
}[];
138+
}[];
139+
}
140+
}
141+
142+
type CSProjPackageReference = {
143+
Include: string;
144+
}
145+
146+
export function getPackageReferences(xml: CSProjXml): CSProjPackageReference[] {
147+
const packageReferences: CSProjPackageReference[] = [];
148+
// package references can be split across multiple item groups
149+
xml.Project?.ItemGroup?.forEach((itemGroup) => {
150+
const references = itemGroup.PackageReference;
151+
if (references) {
152+
references.forEach((reference) => {
153+
packageReferences.push(reference.$);
154+
});
155+
}
156+
});
157+
return packageReferences;
158+
}
131159
}

src/utils/durableUtils.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { ext } from "../extensionVariables";
1313
import { IHostJsonV2, INetheriteTaskJson, ISqlTaskJson, IStorageTaskJson } from "../funcConfig/host";
1414
import { localize } from "../localize";
1515
import { cpUtils } from "./cpUtils";
16+
import { dotnetUtils } from "./dotnetUtils";
1617
import { hasNodeJsDependency } from "./nodeJsUtils";
1718
import { pythonUtils } from "./pythonUtils";
1819
import { venvUtils } from "./venvUtils";
@@ -107,14 +108,9 @@ export namespace durableUtils {
107108
const csProjContents: string = await AzExtFsExtra.readFile(csProjPaths[0].path);
108109

109110
return new Promise((resolve) => {
110-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
111-
xml2js.parseString(csProjContents, { explicitArray: false }, (err: any, result: any): void => {
111+
xml2js.parseString(csProjContents, (err: Error, result: unknown): void => {
112112
if (result && !err) {
113-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
114-
let packageReferences = result?.['Project']?.['ItemGroup']?.[0]?.PackageReference ?? [];
115-
packageReferences = (packageReferences instanceof Array) ? packageReferences : [packageReferences];
116-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
117-
resolve(packageReferences.some(p => /Durable/i.test(p?.['$']?.['Include'] ?? '')));
113+
resolve(dotnetUtils.getPackageReferences(result).some(p => /Durable/i.test(p.Include)));
118114
}
119115
});
120116
});

0 commit comments

Comments
 (0)