diff --git a/lib/modules/manager/nuget/package-tree.spec.ts b/lib/modules/manager/nuget/package-tree.spec.ts
index 5725b7997cb66c0ac37bd638cd63ab869b32f647..e16f5a223cc40ff48f993cbc77496d8fb2a4dda0 100644
--- a/lib/modules/manager/nuget/package-tree.spec.ts
+++ b/lib/modules/manager/nuget/package-tree.spec.ts
@@ -154,5 +154,13 @@ describe('modules/manager/nuget/package-tree', () => {
         'Circular reference detected in NuGet package files'
       );
     });
+
+    it('throws error on invalid xml file', async () => {
+      git.getFileList.mockResolvedValue(['foo/bar.csproj']);
+      Fixtures.mock({ '/tmp/repo/foo/bar.csproj': '<invalid' });
+      await expect(getDependentPackageFiles('foo/bar.csproj')).rejects.toThrow(
+        'Invalid xml file: foo/bar.csproj'
+      );
+    });
   });
 });
diff --git a/lib/modules/manager/nuget/package-tree.ts b/lib/modules/manager/nuget/package-tree.ts
index cce82fb5c870b41808bf33b7b46582a4da8b9274..db23febed63e676f4f5a37bff6d36eaf9b8e9f8f 100644
--- a/lib/modules/manager/nuget/package-tree.ts
+++ b/lib/modules/manager/nuget/package-tree.ts
@@ -2,10 +2,9 @@ import is from '@sindresorhus/is';
 import Graph from 'graph-data-structure';
 import minimatch from 'minimatch';
 import upath from 'upath';
-import xmldoc from 'xmldoc';
 import { logger } from '../../../logger';
-import { readLocalFile } from '../../../util/fs';
 import { getFileList } from '../../../util/git';
+import { readFileAsXmlDocument } from './util';
 
 export const NUGET_CENTRAL_FILE = 'Directory.Packages.props';
 export const MSBUILD_CENTRAL_FILE = 'Packages.props';
@@ -39,10 +38,11 @@ export async function getDependentPackageFiles(
   }
 
   for (const f of packageFiles) {
-    const packageFileContent = await readLocalFile(f, 'utf8');
+    const doc = await readFileAsXmlDocument(f);
+    if (!doc) {
+      throw new Error(`Invalid xml file: ${f}`);
+    }
 
-    // TODO #7154
-    const doc = new xmldoc.XmlDocument(packageFileContent!);
     const projectReferenceAttributes = doc
       .childrenNamed('ItemGroup')
       .map((ig) => ig.childrenNamed('ProjectReference'))
diff --git a/lib/modules/manager/nuget/util.ts b/lib/modules/manager/nuget/util.ts
index ba0751ce1611c75a386103c65d54015d639aa089..f15fd024275a6fbc814cebe9a484654a15b8c4ff 100644
--- a/lib/modules/manager/nuget/util.ts
+++ b/lib/modules/manager/nuget/util.ts
@@ -6,14 +6,16 @@ import { regEx } from '../../../util/regex';
 import { defaultRegistryUrls } from '../../datasource/nuget';
 import type { Registry } from './types';
 
-async function readFileAsXmlDocument(
+export async function readFileAsXmlDocument(
   file: string
 ): Promise<XmlDocument | undefined> {
   try {
     // TODO #7154
-    return new XmlDocument((await readLocalFile(file, 'utf8'))!);
+    const doc = new XmlDocument((await readLocalFile(file, 'utf8'))!);
+    // don't return empty documents
+    return doc?.firstChild ? doc : undefined;
   } catch (err) {
-    logger.debug({ err }, `failed to parse '${file}' as XML document`);
+    logger.debug({ err, file }, `failed to parse file as XML document`);
     return undefined;
   }
 }