C# Compiler Warning 1685

ccompiler-warningsnet

So, (seemingly) out of the blue, my project starts getting compiler warning 1685:

The predefined type
'System.Runtime.CompilerServices.ExtensionAttribute'
is defined in multiple assemblies in
the global alias; using definition
from 'c:\Program Files\Reference
Assemblies\Microsoft\Framework\v3.5\System.Core.dll'

Perplexed, I researched the MSDN article to figure out its cause. Here's the information I found:

Visual C# Reference: Errors and
Warnings Compiler Warning (level 1)
CS1685

Error Message The predefined type
'System.type name' is defined in
multiple assemblies in the global
alias; using definition from 'File
Name'

This error occurs when a predefined
system type such as System.int32 is
found in two assemblies. One way this
can happen is if you are referencing
mscorlib from two different places,
such as trying to run the.Net
Framework versions 1.0 and 1.1
side-by-side.

The compiler will use the definition
from only one of the assemblies. The
compiler searches only global aliases,
does not search libraries defined
/reference. If you have specified
/nostdlib, the compiler will search
for Object, and in the future start
all searches for predefined types in
the file where it found Object.

Now I'm really scratching my head.

  1. I'm not running two different
    versions of the .NET Framework
    (unless you count 2.0 and 3.5).

  2. I'm not referencing any bizarre
    assemblies that might make me
    suspicious.

  3. I don't recall making any changes to my application that would spur this change.

  4. I've verified that all components target .NET Framework version v2.0.50727.

I'm open to suggestions, or ideas on how to correct this. I treat warnings as errors, and it's driving me crazy.

What really bugs me about it is that I don't know why it's occurring. Things that happen should have a discernable cause, and I should know why they happened. If I can't explain it, I can't accurately remedy it. Guesswork is never satisfactory.

The application is straightforward, consisting of a class library, and a windows forms application.

  • A C# class library DLL providing basic functionality encapsulating database access. This DLL references the following components:

    • System
    • System.Core
    • System.Core.Data
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq
  • A C# Windows Forms application providing the UI. This application references the following components:

    • CleanCode
    • CleanCodeControls (both of these provide syntax editor support, and are locally built against .NET 3.5).
    • LinqBridge
    • Roswell.Framework (the class library above)
    • System
    • System.Core
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Deployment
    • System.Design
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq

Let me know if you need further information and I'll gladly provide it.

Best Answer

Another easy way to verify: In your code, temporarily use the class somewhere. Example:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

When building, this will generate error:

The type 'System.Runtime.CompilerServices.ExtensionAttribute' exists in both 'c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll' and .....

And show you immediately the 2 sources causing the conflict.