diff --git a/lib/modules/datasource/dotnet/index.ts b/lib/modules/datasource/dotnet/index.ts
index 35ea957eb353611b6569b5581ffe9ca1e9a33ce9..4b1090373061eebe848506e4f31fda19277ae047 100644
--- a/lib/modules/datasource/dotnet/index.ts
+++ b/lib/modules/datasource/dotnet/index.ts
@@ -1,8 +1,10 @@
+import is from '@sindresorhus/is';
 import { cache } from '../../../util/cache/package/decorator';
 import type { HttpResponse } from '../../../util/http/types';
 import { Datasource } from '../datasource';
 import type { GetReleasesConfig, Release, ReleaseResult } from '../types';
 import {
+  DotnetRelease,
   DotnetReleases,
   DotnetReleasesIndex,
   DotnetReleasesIndexSchema,
@@ -71,7 +73,8 @@ export class DotnetDatasource extends Datasource {
 
   @cache({
     namespace: `datasource-${DotnetDatasource.id}`,
-    key: (releaseUrl: string) => releaseUrl,
+    key: (releaseUrl: string, packageName: string) =>
+      `${releaseUrl}:${packageName}`,
     ttlMinutes: 1440,
   })
   async getChannelReleases(
@@ -91,13 +94,23 @@ export class DotnetDatasource extends Datasource {
     if (body) {
       const type = DotnetDatasource.getType(packageName);
       const { releases: releases } = body;
-      result = releases.map((release) => {
-        return {
-          version: release[type].version,
-          releaseTimestamp: release['release-date'],
-          changelogUrl: release['release-notes'],
-        };
-      });
+      result = releases
+        .filter(
+          (
+            release
+          ): release is {
+            [P in keyof DotnetRelease]: NonNullable<DotnetRelease[P]>;
+          } => {
+            return !is.nullOrUndefined(release[type]);
+          }
+        )
+        .map((release) => {
+          return {
+            version: release[type].version,
+            releaseTimestamp: release['release-date'],
+            changelogUrl: release['release-notes'],
+          };
+        });
     }
 
     return result;
diff --git a/lib/modules/datasource/dotnet/readme.md b/lib/modules/datasource/dotnet/readme.md
index 19fcb5f56031a3d56164af9c8420b25737517fce..c0277d67357a9d2334fcc7714c87614c6922ebd6 100644
--- a/lib/modules/datasource/dotnet/readme.md
+++ b/lib/modules/datasource/dotnet/readme.md
@@ -1 +1,2 @@
 This datasource returns releases of the .NET Runtime and SDK.
+It only accepts dependencies with the name `dotnet-sdk` or `dotnet-runtime`.
diff --git a/lib/modules/datasource/dotnet/schema.ts b/lib/modules/datasource/dotnet/schema.ts
index 878e742ba36c07faa883c690c7b74749b9a81b6e..3ae3a118c6782e5a09608581f88ce4efe077fb9e 100644
--- a/lib/modules/datasource/dotnet/schema.ts
+++ b/lib/modules/datasource/dotnet/schema.ts
@@ -29,13 +29,13 @@ const ReleaseDetails = z.object({
   version: z.string(),
   'version-display': z.string(),
 });
-const Release = z.object({
+const ReleaseSchema = z.object({
   'release-date': z.date(),
   'release-version': z.string(),
   security: z.boolean(),
   'release-notes': z.string(),
-  runtime: ReleaseDetails,
-  sdk: ReleaseDetails,
+  runtime: z.nullable(ReleaseDetails),
+  sdk: z.nullable(ReleaseDetails),
 });
 export const DotnetReleasesSchema = z.object({
   'channel-version': z.string(),
@@ -44,8 +44,9 @@ export const DotnetReleasesSchema = z.object({
   'latest-runtime': z.string(),
   'latest-sdk': z.string(),
   'support-phase': SupportPhase,
-  releases: z.array(Release),
+  releases: z.array(ReleaseSchema),
 });
 
 export type DotnetReleasesIndex = z.infer<typeof DotnetReleasesIndexSchema>;
 export type DotnetReleases = z.infer<typeof DotnetReleasesSchema>;
+export type DotnetRelease = z.infer<typeof ReleaseSchema>;