diff --git a/lib/manager/nuget/__fixtures__/with-config-file/NuGet.config b/lib/manager/nuget/__fixtures__/with-config-file/NuGet.config
index 6cb726de41c628cffdf4b33723bed9e7eb70610c..77da4bd6be1d7716cd85e0d5b385bcd48a2f246f 100644
--- a/lib/manager/nuget/__fixtures__/with-config-file/NuGet.config
+++ b/lib/manager/nuget/__fixtures__/with-config-file/NuGet.config
@@ -4,5 +4,6 @@
     <clear />
     <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
     <add key="Contoso" value="https://contoso.com/packages/" />
+    <remove key="test" />
   </packageSources>
 </configuration>
diff --git a/lib/manager/nuget/__snapshots__/extract.spec.ts.snap b/lib/manager/nuget/__snapshots__/extract.spec.ts.snap
index e2e788f8a2fb774735fce6c5d86332726fd55bff..e90466b83895e6d1697620bc54ed923bd497a80b 100644
--- a/lib/manager/nuget/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/nuget/__snapshots__/extract.spec.ts.snap
@@ -1,5 +1,35 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
+exports[`lib/manager/nuget/extract extractPackageFile() .config/dotnet-tools.json with-config 1`] = `
+Object {
+  "deps": Array [
+    Object {
+      "currentValue": "2.0.0",
+      "datasource": "nuget",
+      "depName": "minver-cli",
+      "depType": "nuget",
+      "registryUrls": Array [
+        "https://api.nuget.org/v3/index.json#protocolVersion=3",
+        "https://contoso.com/packages/",
+      ],
+    },
+  ],
+}
+`;
+
+exports[`lib/manager/nuget/extract extractPackageFile() .config/dotnet-tools.json works 1`] = `
+Object {
+  "deps": Array [
+    Object {
+      "currentValue": "2.0.0",
+      "datasource": "nuget",
+      "depName": "minver-cli",
+      "depType": "nuget",
+    },
+  ],
+}
+`;
+
 exports[`lib/manager/nuget/extract extractPackageFile() considers NuGet.config 1`] = `
 Object {
   "deps": Array [
diff --git a/lib/manager/nuget/extract.spec.ts b/lib/manager/nuget/extract.spec.ts
index e7733fb42003b6c6116ea5c85a58cff52922b0a2..926cac2b60cecd331c36e68b5750fa25c23ed2d9 100644
--- a/lib/manager/nuget/extract.spec.ts
+++ b/lib/manager/nuget/extract.spec.ts
@@ -1,10 +1,11 @@
 import { readFileSync } from 'fs';
 import * as path from 'path';
+import { ExtractConfig } from '../common';
 import { extractPackageFile } from './extract';
 
 describe('lib/manager/nuget/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
+    let config: ExtractConfig;
     beforeEach(() => {
       config = {
         localDir: path.resolve('lib/manager/nuget/__fixtures__'),
@@ -84,5 +85,48 @@ describe('lib/manager/nuget/extract', () => {
         await extractPackageFile(contents, packageFile, config)
       ).toMatchSnapshot();
     });
+
+    describe('.config/dotnet-tools.json', () => {
+      const packageFile = '.config/dotnet-tools.json';
+      const contents = `{
+  "version": 1,
+  "isRoot": true,
+  "tools": {
+    "minver-cli": {
+      "version": "2.0.0",
+      "commands": ["minver"]
+    }
+  }
+}`;
+      it('works', async () => {
+        expect(
+          await extractPackageFile(contents, packageFile, config)
+        ).toMatchSnapshot();
+      });
+
+      it('with-config', async () => {
+        expect(
+          await extractPackageFile(
+            contents,
+            `with-config-file/${packageFile}`,
+            config
+          )
+        ).toMatchSnapshot();
+      });
+
+      it('wrong version', async () => {
+        expect(
+          await extractPackageFile(
+            contents.replace('"version": 1,', '"version": 2,'),
+            packageFile,
+            config
+          )
+        ).toBeNull();
+      });
+
+      it('does not throw', async () => {
+        expect(await extractPackageFile('{{', packageFile, config)).toBeNull();
+      });
+    });
   });
 });
diff --git a/lib/manager/nuget/extract.ts b/lib/manager/nuget/extract.ts
index 116a2c023ad0f2fe1de0f8e664a8561d45ced2ad..c6403ed4bd7b360a9cdcda792124472384cd32f3 100644
--- a/lib/manager/nuget/extract.ts
+++ b/lib/manager/nuget/extract.ts
@@ -8,6 +8,7 @@ import { SkipReason } from '../../types';
 import { get } from '../../versioning';
 import * as semverVersioning from '../../versioning/semver';
 import { ExtractConfig, PackageDependency, PackageFile } from '../common';
+import { DotnetToolsManifest } from './types';
 
 async function readFileAsXmlDocument(file: string): Promise<XmlDocument> {
   try {
@@ -58,6 +59,7 @@ async function determineRegistryUrls(
         logger.debug({ registryUrl }, 'adding registry URL');
         registryUrls.push(registryUrl);
       }
+      // child.name === 'remove' not supported
     }
   }
   return registryUrls;
@@ -68,7 +70,7 @@ export async function extractPackageFile(
   content: string,
   packageFile: string,
   config: ExtractConfig
-): Promise<PackageFile> {
+): Promise<PackageFile | null> {
   logger.trace({ packageFile }, 'nuget.extractPackageFile()');
   const { isVersion } = get(config.versioning || semverVersioning.id);
   const deps: PackageDependency[] = [];
@@ -78,6 +80,40 @@ export async function extractPackageFile(
     config.localDir
   );
 
+  if (packageFile.endsWith('.config/dotnet-tools.json')) {
+    let manifest: DotnetToolsManifest;
+
+    try {
+      manifest = JSON.parse(content);
+    } catch (err) {
+      logger.debug({ fileName: packageFile }, 'Invalid JSON');
+      return null;
+    }
+
+    if (manifest.version !== 1) {
+      logger.debug({ contents: manifest }, 'Unsupported dotnet tools version');
+      return null;
+    }
+
+    for (const depName of Object.keys(manifest.tools)) {
+      const tool = manifest.tools[depName];
+      const currentValue = tool.version;
+      const dep: PackageDependency = {
+        depType: 'nuget',
+        depName,
+        currentValue,
+        datasource: datasourceNuget.id,
+      };
+      if (registryUrls) {
+        dep.registryUrls = registryUrls;
+      }
+
+      deps.push(dep);
+    }
+
+    return { deps };
+  }
+
   for (const line of content.split('\n')) {
     /**
      * https://docs.microsoft.com/en-us/nuget/concepts/package-versioning
diff --git a/lib/manager/nuget/index.ts b/lib/manager/nuget/index.ts
index f42cb6035220dcfd808005bef33f405f86c026f4..32d3de691697fc32be533071982b21d7447e4837 100644
--- a/lib/manager/nuget/index.ts
+++ b/lib/manager/nuget/index.ts
@@ -5,5 +5,9 @@ export { extractPackageFile } from './extract';
 export const language = LANGUAGE_DOT_NET;
 
 export const defaultConfig = {
-  fileMatch: ['\\.(?:cs|fs|vb)proj$'],
+  fileMatch: [
+    '\\.(?:cs|fs|vb)proj$',
+    '\\.(?:props|targets)$',
+    '\\.config\\/dotnet-tools\\.json$',
+  ],
 };
diff --git a/lib/manager/nuget/types.ts b/lib/manager/nuget/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e2cbb13bf93d4f8fafbb4712af6a8e0404ed29f7
--- /dev/null
+++ b/lib/manager/nuget/types.ts
@@ -0,0 +1,11 @@
+export interface DotnetToolsManifest {
+  readonly version: number;
+  readonly isRoot: boolean;
+
+  readonly tools: Record<string, DotnetTool>;
+}
+
+export interface DotnetTool {
+  readonly version: string;
+  readonly commands: string[];
+}