Remove CLS compliance from runtime code.
We need to remove it from the generator too; I'll raise a github issue for that.
diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs
index e198d0b..99ecec8 100644
--- a/csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs
@@ -63,7 +63,6 @@
         /// <summary>

         /// Returns true if it was able to read a UInt32 from the input

         /// </summary>

-        [CLSCompliant(false)]

         protected abstract bool Read(ref uint value);

 

         /// <summary>

@@ -74,7 +73,6 @@
         /// <summary>

         /// Returns true if it was able to read a UInt64 from the input

         /// </summary>

-        [CLSCompliant(false)]

         protected abstract bool Read(ref ulong value);

 

         /// <summary>

diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs
index b40a560..41578fa 100644
--- a/csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs
@@ -62,7 +62,6 @@
         /// <summary>

         /// Returns true if it was able to read a UInt32 from the input

         /// </summary>

-        [CLSCompliant(false)]

         protected override bool Read(ref uint value)

         {

             string text = null;

@@ -91,7 +90,6 @@
         /// <summary>

         /// Returns true if it was able to read a UInt64 from the input

         /// </summary>

-        [CLSCompliant(false)]

         protected override bool Read(ref ulong value)

         {

             string text = null;

diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs
index 2c778df..e13cbba 100644
--- a/csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs
@@ -48,7 +48,6 @@
         /// <summary>

         /// Writes a UInt32 value

         /// </summary>

-        [CLSCompliant(false)]

         protected override void Write(string field, uint value)

         {

             WriteAsText(field, XmlConvert.ToString(value), value);

@@ -65,7 +64,6 @@
         /// <summary>

         /// Writes a UInt64 value

         /// </summary>

-        [CLSCompliant(false)]

         protected override void Write(string field, ulong value)

         {

             WriteAsText(field, XmlConvert.ToString(value), value);

diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs
index 2dc6b88..f4cfe3e 100644
--- a/csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs
@@ -59,7 +59,6 @@
         /// <summary>

         /// Writes a UInt32 value

         /// </summary>

-        [CLSCompliant(false)]

         protected abstract void Write(string field, UInt32 value);

 

         /// <summary>

@@ -70,7 +69,6 @@
         /// <summary>

         /// Writes a UInt64 value

         /// </summary>

-        [CLSCompliant(false)]

         protected abstract void Write(string field, UInt64 value);

 

         /// <summary>

@@ -185,7 +183,6 @@
         /// <summary>

         /// Writes a numeric unknown field of wire type: Fixed32, Fixed64, or Variant

         /// </summary>

-        [CLSCompliant(false)]

         protected virtual void WriteUnknown(WireFormat.WireType wireType, int fieldNumber, ulong value)

         {

         }

@@ -193,7 +190,6 @@
         /// <summary>

         /// Writes an unknown field, Expect WireType of GroupStart or LengthPrefix

         /// </summary>

-        [CLSCompliant(false)]

         protected virtual void WriteUnknown(WireFormat.WireType wireType, int fieldNumber, ByteString value)

         {

         }

diff --git a/csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs b/csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs
index c460523..971d0fe 100644
--- a/csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs
+++ b/csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs
@@ -118,7 +118,6 @@
         /// <summary>

         /// Returns true if it was able to read a UInt32 from the input

         /// </summary>

-        [CLSCompliant(false)]

         protected override bool Read(ref uint value)

         {

             return GetValue(ref value);

@@ -135,7 +134,6 @@
         /// <summary>

         /// Returns true if it was able to read a UInt64 from the input

         /// </summary>

-        [CLSCompliant(false)]

         protected override bool Read(ref ulong value)

         {

             return GetValue(ref value);

diff --git a/csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs b/csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs
index 6d82330..8cc8ed6 100644
--- a/csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs
+++ b/csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs
@@ -85,7 +85,6 @@
         /// <summary>

         /// Writes a UInt32 value

         /// </summary>

-        [CLSCompliant(false)]

         protected override void Write(string field, uint value)

         {

             _output[field] = value;

@@ -102,7 +101,6 @@
         /// <summary>

         /// Writes a UInt64 value

         /// </summary>

-        [CLSCompliant(false)]

         protected override void Write(string field, ulong value)

         {

             _output[field] = value;

diff --git a/csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs b/csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs
index c6420b5..0ab5812 100644
--- a/csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs
+++ b/csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs
@@ -63,5 +63,3 @@
 #if !NOFILEVERSION

 [assembly: AssemblyFileVersion("2.4.1.555")]

 #endif

-

-[assembly: CLSCompliant(true)]
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs b/csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs
index b443ea3..bfa1f05 100644
--- a/csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs
+++ b/csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs
@@ -28,8 +28,3 @@
 // [assembly: AssemblyVersion("2.4.1.555")]

 

 [assembly: AssemblyVersion("2.4.1.555")]

-

-// We don't really need CLSCompliance, but if the assembly builds with no warnings,

-// that means the generator is okay.

-

-[assembly: CLSCompliant(false)]
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/CodedInputStream.cs b/csharp/src/ProtocolBuffers/CodedInputStream.cs
index 773e8c1..37774d0 100644
--- a/csharp/src/ProtocolBuffers/CodedInputStream.cs
+++ b/csharp/src/ProtocolBuffers/CodedInputStream.cs
@@ -186,7 +186,6 @@
         /// </summary>

         /// <exception cref="InvalidProtocolBufferException">The last

         /// tag read was not the one specified</exception>

-        [CLSCompliant(false)]

         public void CheckLastTagWas(uint value)

         {

             if (lastTag != value)

@@ -202,7 +201,6 @@
         /// <summary>

         /// Attempt to peek at the next field tag.

         /// </summary>

-        [CLSCompliant(false)]

         public bool PeekNextTag(out uint fieldTag, out string fieldName)

         {

             if (hasNextTag)

@@ -226,7 +224,6 @@
         /// <param name="fieldTag">The 'tag' of the field (id * 8 + wire-format)</param>

         /// <param name="fieldName">Not Supported - For protobuffer streams, this parameter is always null</param>

         /// <returns>true if the next fieldTag was read</returns>

-        [CLSCompliant(false)]

         public bool ReadTag(out uint fieldTag, out string fieldName)

         {

             fieldName = null;

@@ -290,7 +287,6 @@
         /// <summary>

         /// Read a uint64 field from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public bool ReadUInt64(ref ulong value)

         {

             value = ReadRawVarint64();

@@ -318,7 +314,6 @@
         /// <summary>

         /// Read a fixed64 field from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public bool ReadFixed64(ref ulong value)

         {

             value = ReadRawLittleEndian64();

@@ -328,7 +323,6 @@
         /// <summary>

         /// Read a fixed32 field from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public bool ReadFixed32(ref uint value)

         {

             value = ReadRawLittleEndian32();

@@ -447,7 +441,6 @@
         /// <summary>

         /// Reads a uint32 field value from the stream.

         /// </summary>   

-        [CLSCompliant(false)]

         public bool ReadUInt32(ref uint value)

         {

             value = ReadRawVarint32();

@@ -477,7 +470,6 @@
         /// then the ref value is set and it returns true.  Otherwise the unknown output

         /// value is set and this method returns false.

         /// </summary>   

-        [CLSCompliant(false)]

         public bool ReadEnum<T>(ref T value, out object unknown)

             where T : struct, IComparable, IFormattable

         {

@@ -593,7 +585,6 @@
             return false;

         }

 

-        [CLSCompliant(false)]

         public void ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName, ICollection<object> list)

         {

             WireFormat.WireType normal = WireFormat.GetWireType(fieldType);

@@ -627,7 +618,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadStringArray(uint fieldTag, string fieldName, ICollection<string> list)

         {

             string tmp = null;

@@ -638,7 +628,6 @@
             } while (ContinueArray(fieldTag));

         }

 

-        [CLSCompliant(false)]

         public void ReadBytesArray(uint fieldTag, string fieldName, ICollection<ByteString> list)

         {

             ByteString tmp = null;

@@ -649,7 +638,6 @@
             } while (ContinueArray(fieldTag));

         }

 

-        [CLSCompliant(false)]

         public void ReadBoolArray(uint fieldTag, string fieldName, ICollection<bool> list)

         {

             bool isPacked;

@@ -665,7 +653,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list)

         {

             bool isPacked;

@@ -681,7 +668,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadSInt32Array(uint fieldTag, string fieldName, ICollection<int> list)

         {

             bool isPacked;

@@ -697,7 +683,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadUInt32Array(uint fieldTag, string fieldName, ICollection<uint> list)

         {

             bool isPacked;

@@ -713,7 +698,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadFixed32Array(uint fieldTag, string fieldName, ICollection<uint> list)

         {

             bool isPacked;

@@ -729,7 +713,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection<int> list)

         {

             bool isPacked;

@@ -745,7 +728,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadInt64Array(uint fieldTag, string fieldName, ICollection<long> list)

         {

             bool isPacked;

@@ -761,7 +743,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadSInt64Array(uint fieldTag, string fieldName, ICollection<long> list)

         {

             bool isPacked;

@@ -777,7 +758,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadUInt64Array(uint fieldTag, string fieldName, ICollection<ulong> list)

         {

             bool isPacked;

@@ -793,7 +773,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadFixed64Array(uint fieldTag, string fieldName, ICollection<ulong> list)

         {

             bool isPacked;

@@ -809,7 +788,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection<long> list)

         {

             bool isPacked;

@@ -825,7 +803,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadDoubleArray(uint fieldTag, string fieldName, ICollection<double> list)

         {

             bool isPacked;

@@ -841,7 +818,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadFloatArray(uint fieldTag, string fieldName, ICollection<float> list)

         {

             bool isPacked;

@@ -857,7 +833,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadEnumArray(uint fieldTag, string fieldName, ICollection<IEnumLite> list,

                                   out ICollection<object> unknown, IEnumLiteMap mapping)

         {

@@ -908,7 +883,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadEnumArray<T>(uint fieldTag, string fieldName, ICollection<T> list,

                                      out ICollection<object> unknown)

             where T : struct, IComparable, IFormattable

@@ -960,7 +934,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

                                         ExtensionRegistry registry) where T : IMessageLite

         {

@@ -972,7 +945,6 @@
             } while (ContinueArray(fieldTag));

         }

 

-        [CLSCompliant(false)]

         public void ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

                                       ExtensionRegistry registry) where T : IMessageLite

         {

@@ -1217,7 +1189,6 @@
         /// That means we can check the size just once, then just read directly from the buffer

         /// without constant rechecking of the buffer length.

         /// </summary>

-        [CLSCompliant(false)]

         public uint ReadRawVarint32()

         {

             if (bufferPos + 5 > bufferSize)

@@ -1283,7 +1254,6 @@
         /// </summary>

         /// <param name="input"></param>

         /// <returns></returns>

-        [CLSCompliant(false)]

         public static uint ReadRawVarint32(Stream input)

         {

             int result = 0;

@@ -1320,7 +1290,6 @@
         /// <summary>

         /// Read a raw varint from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public ulong ReadRawVarint64()

         {

             int shift = 0;

@@ -1341,7 +1310,6 @@
         /// <summary>

         /// Read a 32-bit little-endian integer from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public uint ReadRawLittleEndian32()

         {

             uint b1 = ReadRawByte();

@@ -1354,7 +1322,6 @@
         /// <summary>

         /// Read a 64-bit little-endian integer from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public ulong ReadRawLittleEndian64()

         {

             ulong b1 = ReadRawByte();

@@ -1380,7 +1347,6 @@
         /// sign-extended to 64 bits to be varint encoded, thus always taking

         /// 10 bytes on the wire.)

         /// </remarks>

-        [CLSCompliant(false)]

         public static int DecodeZigZag32(uint n)

         {

             return (int) (n >> 1) ^ -(int) (n & 1);

@@ -1395,7 +1361,6 @@
         /// sign-extended to 64 bits to be varint encoded, thus always taking

         /// 10 bytes on the wire.)

         /// </remarks>

-        [CLSCompliant(false)]

         public static long DecodeZigZag64(ulong n)

         {

             return (long) (n >> 1) ^ -(long) (n & 1);

@@ -1732,7 +1697,6 @@
         /// </summary>

         /// <returns>false if the tag is an end-group tag, in which case

         /// nothing is skipped. Otherwise, returns true.</returns>

-        [CLSCompliant(false)]

         public bool SkipField()

         {

             uint tag = lastTag;

diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs
index ca6662a..99d82fc 100644
--- a/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs
+++ b/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs
@@ -71,7 +71,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// uint64 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeUInt64Size(int fieldNumber, ulong value)

         {

             return ComputeTagSize(fieldNumber) + ComputeRawVarint64Size(value);

@@ -107,7 +106,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// fixed64 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeFixed64Size(int fieldNumber, ulong value)

         {

             return ComputeTagSize(fieldNumber) + LittleEndian64Size;

@@ -117,7 +115,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// fixed32 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeFixed32Size(int fieldNumber, uint value)

         {

             return ComputeTagSize(fieldNumber) + LittleEndian32Size;

@@ -189,7 +186,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// uint32 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeUInt32Size(int fieldNumber, uint value)

         {

             return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size(value);

@@ -263,7 +259,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// uint64 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeUInt64SizeNoTag(ulong value)

         {

             return ComputeRawVarint64Size(value);

@@ -299,7 +294,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// fixed64 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeFixed64SizeNoTag(ulong value)

         {

             return LittleEndian64Size;

@@ -309,7 +303,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// fixed32 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeFixed32SizeNoTag(uint value)

         {

             return LittleEndian32Size;

@@ -378,7 +371,6 @@
         /// Compute the number of bytes that would be needed to encode a

         /// uint32 field, including the tag.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeUInt32SizeNoTag(uint value)

         {

             return ComputeRawVarint32Size(value);

@@ -463,7 +455,6 @@
         /// <summary>

         /// Compute the number of bytes that would be needed to encode a varint.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeRawVarint32Size(uint value)

         {

             if ((value & (0xffffffff << 7)) == 0)

@@ -488,7 +479,6 @@
         /// <summary>

         /// Compute the number of bytes that would be needed to encode a varint.

         /// </summary>

-        [CLSCompliant(false)]

         public static int ComputeRawVarint64Size(ulong value)

         {

             if ((value & (0xffffffffffffffffL << 7)) == 0)

diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.cs
index d267b75..c37fcc1 100644
--- a/csharp/src/ProtocolBuffers/CodedOutputStream.cs
+++ b/csharp/src/ProtocolBuffers/CodedOutputStream.cs
@@ -159,7 +159,6 @@
             WriteBytes(fieldNumber, null /*not used*/, value);

         }

 

-        [CLSCompliant(false)]

         public void WriteUnknownField(int fieldNumber, WireFormat.WireType wireType, ulong value)

         {

             if (wireType == WireFormat.WireType.Varint)

@@ -273,7 +272,6 @@
         /// <summary>

         /// Writes a uint64 field value, including tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteUInt64(int fieldNumber, string fieldName, ulong value)

         {

             WriteTag(fieldNumber, WireFormat.WireType.Varint);

@@ -309,7 +307,6 @@
         /// <summary>

         /// Writes a fixed64 field value, including tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteFixed64(int fieldNumber, string fieldName, ulong value)

         {

             WriteTag(fieldNumber, WireFormat.WireType.Fixed64);

@@ -319,7 +316,6 @@
         /// <summary>

         /// Writes a fixed32 field value, including tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteFixed32(int fieldNumber, string fieldName, uint value)

         {

             WriteTag(fieldNumber, WireFormat.WireType.Fixed32);

@@ -381,7 +377,6 @@
             value.WriteRawBytesTo(this);

         }

 

-        [CLSCompliant(false)]

         public void WriteUInt32(int fieldNumber, string fieldName, uint value)

         {

             WriteTag(fieldNumber, WireFormat.WireType.Varint);

@@ -541,7 +536,6 @@
         /// <summary>

         /// Writes a uint64 field value, without a tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteUInt64NoTag(ulong value)

         {

             WriteRawVarint64(value);

@@ -574,7 +568,6 @@
         /// <summary>

         /// Writes a fixed64 field value, without a tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteFixed64NoTag(ulong value)

         {

             WriteRawLittleEndian64(value);

@@ -583,7 +576,6 @@
         /// <summary>

         /// Writes a fixed32 field value, without a tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteFixed32NoTag(uint value)

         {

             WriteRawLittleEndian32(value);

@@ -638,7 +630,6 @@
             value.WriteRawBytesTo(this);

         }

 

-        [CLSCompliant(false)]

         public void WriteUInt32NoTag(uint value)

         {

             WriteRawVarint32(value);

@@ -819,7 +810,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

             where T : struct, IComparable, IFormattable

         {

@@ -1041,7 +1031,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void WritePackedEnumArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)

             where T : struct, IComparable, IFormattable

         {

@@ -1070,7 +1059,6 @@
         /// <summary>

         /// Encodes and writes a tag.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteTag(int fieldNumber, WireFormat.WireType type)

         {

             WriteRawVarint32(WireFormat.MakeTag(fieldNumber, type));

@@ -1081,7 +1069,6 @@
         /// there's enough buffer space left to whizz through without checking

         /// for each byte; otherwise, we resort to calling WriteRawByte each time.

         /// </summary>

-        [CLSCompliant(false)]

         public void WriteRawVarint32(uint value)

         {

             while (value > 127 && position < limit)

@@ -1104,7 +1091,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void WriteRawVarint64(ulong value)

         {

             while (value > 127 && position < limit)

@@ -1127,7 +1113,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void WriteRawLittleEndian32(uint value)

         {

             if (position + 4 > limit)

@@ -1146,7 +1131,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public void WriteRawLittleEndian64(ulong value)

         {

             if (position + 8 > limit)

@@ -1183,7 +1167,6 @@
             buffer[position++] = value;

         }

 

-        [CLSCompliant(false)]

         public void WriteRawByte(uint value)

         {

             WriteRawByte((byte) value);

@@ -1247,7 +1230,6 @@
         /// sign-extended to 64 bits to be varint encoded, thus always taking

         /// 10 bytes on the wire.)

         /// </remarks>

-        [CLSCompliant(false)]

         public static uint EncodeZigZag32(int n)

         {

             // Note:  the right-shift must be arithmetic

@@ -1263,7 +1245,6 @@
         /// sign-extended to 64 bits to be varint encoded, thus always taking

         /// 10 bytes on the wire.)

         /// </remarks>

-        [CLSCompliant(false)]

         public static ulong EncodeZigZag64(long n)

         {

             return (ulong) ((n << 1) ^ (n >> 63));

diff --git a/csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
index 98de543..076dc85 100644
--- a/csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
+++ b/csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
@@ -298,16 +298,6 @@
             get { return fieldType; }

         }

 

-        public bool IsCLSCompliant

-        {

-            get 

-            { 

-                return mappedType != MappedType.UInt32 && 

-                    mappedType != MappedType.UInt64 &&

-                    !NameHelpers.UnderscoresToPascalCase(Name).StartsWith("_");

-            }

-        }

-

         public int FieldNumber

         {

             get { return Proto.Number; }

diff --git a/csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs b/csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs
index fc58d04..752ecf6 100644
--- a/csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs
+++ b/csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs
@@ -40,7 +40,6 @@
     /// Defined specifically for the <see cref="FieldType" /> enumeration,

     /// this allows each field type to specify the mapped type and wire type.

     /// </summary>

-    [CLSCompliant(false)]

     [AttributeUsage(AttributeTargets.Field)]

     public sealed class FieldMappingAttribute : Attribute

     {

diff --git a/csharp/src/ProtocolBuffers/ExtendableBuilder.cs b/csharp/src/ProtocolBuffers/ExtendableBuilder.cs
index 111ff57..62508e0 100644
--- a/csharp/src/ProtocolBuffers/ExtendableBuilder.cs
+++ b/csharp/src/ProtocolBuffers/ExtendableBuilder.cs
@@ -129,7 +129,6 @@
         /// Called by subclasses to parse an unknown field or an extension.

         /// </summary>

         /// <returns>true unless the tag is an end-group tag</returns>

-        [CLSCompliant(false)]

         protected override bool ParseUnknownField(ICodedInputStream input, UnknownFieldSet.Builder unknownFields,

                                                   ExtensionRegistry extensionRegistry, uint tag, string fieldName)

         {

diff --git a/csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs b/csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs
index 2a71aa4..7f97ccf 100644
--- a/csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs
+++ b/csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs
@@ -132,7 +132,6 @@
         /// Called by subclasses to parse an unknown field or an extension.

         /// </summary>

         /// <returns>true unless the tag is an end-group tag</returns>

-        [CLSCompliant(false)]

         protected override bool ParseUnknownField(ICodedInputStream input,

                                                   ExtensionRegistry extensionRegistry, uint tag, string fieldName)

         {

diff --git a/csharp/src/ProtocolBuffers/GeneratedBuilder.cs b/csharp/src/ProtocolBuffers/GeneratedBuilder.cs
index fd6fe4d..e60a420 100644
--- a/csharp/src/ProtocolBuffers/GeneratedBuilder.cs
+++ b/csharp/src/ProtocolBuffers/GeneratedBuilder.cs
@@ -83,7 +83,6 @@
         /// Called by derived classes to parse an unknown field.

         /// </summary>

         /// <returns>true unless the tag is an end-group tag</returns>

-        [CLSCompliant(false)]

         protected virtual bool ParseUnknownField(ICodedInputStream input, UnknownFieldSet.Builder unknownFields,

                                                  ExtensionRegistry extensionRegistry, uint tag, string fieldName)

         {

diff --git a/csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs b/csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs
index 4030e80..5783c98 100644
--- a/csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs
+++ b/csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs
@@ -65,7 +65,6 @@
         /// Called by derived classes to parse an unknown field.

         /// </summary>

         /// <returns>true unless the tag is an end-group tag</returns>

-        [CLSCompliant(false)]

         protected virtual bool ParseUnknownField(ICodedInputStream input,

                                                  ExtensionRegistry extensionRegistry, uint tag, string fieldName)

         {

diff --git a/csharp/src/ProtocolBuffers/ICodedInputStream.cs b/csharp/src/ProtocolBuffers/ICodedInputStream.cs
index b39b602..790274f 100644
--- a/csharp/src/ProtocolBuffers/ICodedInputStream.cs
+++ b/csharp/src/ProtocolBuffers/ICodedInputStream.cs
@@ -78,7 +78,6 @@
         /// builders will always prefer the fieldTag over fieldName.

         /// </para>

         /// </remarks>

-        [CLSCompliant(false)]

         bool ReadTag(out uint fieldTag, out string fieldName);

 

         /// <summary>

@@ -94,7 +93,6 @@
         /// <summary>

         /// Read a uint64 field from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         bool ReadUInt64(ref ulong value);

 

         /// <summary>

@@ -110,13 +108,11 @@
         /// <summary>

         /// Read a fixed64 field from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         bool ReadFixed64(ref ulong value);

 

         /// <summary>

         /// Read a fixed32 field from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         bool ReadFixed32(ref uint value);

 

         /// <summary>

@@ -155,7 +151,6 @@
         /// <summary>

         /// Reads a uint32 field value from the stream.

         /// </summary>   

-        [CLSCompliant(false)]

         bool ReadUInt32(ref uint value);

 

         /// <summary>

@@ -169,7 +164,6 @@
         /// then the ref value is set and it returns true.  Otherwise the unkown output

         /// value is set and this method returns false.

         /// </summary>   

-        [CLSCompliant(false)]

         bool ReadEnum<T>(ref T value, out object unknown)

             where T : struct, IComparable, IFormattable;

 

@@ -197,14 +191,12 @@
         /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed and the 

         /// type is numeric, it will read a packed array.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName, ICollection<object> list);

 

         /// <summary>

         /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed, it will

         /// read a packed array.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadEnumArray(uint fieldTag, string fieldName, ICollection<IEnumLite> list, out ICollection<object> unknown,

                            IEnumLiteMap mapping);

 

@@ -212,7 +204,6 @@
         /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed, it will

         /// read a packed array.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadEnumArray<T>(uint fieldTag, string fieldName, ICollection<T> list, out ICollection<object> unknown)

             where T : struct, IComparable, IFormattable;

 

@@ -220,14 +211,12 @@
         /// Reads a set of messages using the <paramref name="messageType"/> as a template.  T is not guaranteed to be 

         /// the most derived type, it is only the type specifier for the collection.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

                                  ExtensionRegistry registry) where T : IMessageLite;

 

         /// <summary>

         /// Reads a set of messages using the <paramref name="messageType"/> as a template.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

                                ExtensionRegistry registry) where T : IMessageLite;

 

@@ -249,97 +238,81 @@
         /// </summary>

         /// <returns>false if the tag is an end-group tag, in which case

         /// nothing is skipped. Otherwise, returns true.</returns>

-        [CLSCompliant(false)]

         bool SkipField();

 

         /// <summary>

         /// Reads one or more repeated string field values from the stream.

         /// </summary>   

-        [CLSCompliant(false)]

         void ReadStringArray(uint fieldTag, string fieldName, ICollection<string> list);

 

         /// <summary>

         /// Reads one or more repeated ByteString field values from the stream.

         /// </summary>   

-        [CLSCompliant(false)]

         void ReadBytesArray(uint fieldTag, string fieldName, ICollection<ByteString> list);

 

         /// <summary>

         /// Reads one or more repeated boolean field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadBoolArray(uint fieldTag, string fieldName, ICollection<bool> list);

 

         /// <summary>

         /// Reads one or more repeated Int32 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list);

 

         /// <summary>

         /// Reads one or more repeated SInt32 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadSInt32Array(uint fieldTag, string fieldName, ICollection<int> list);

 

         /// <summary>

         /// Reads one or more repeated UInt32 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadUInt32Array(uint fieldTag, string fieldName, ICollection<uint> list);

 

         /// <summary>

         /// Reads one or more repeated Fixed32 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadFixed32Array(uint fieldTag, string fieldName, ICollection<uint> list);

 

         /// <summary>

         /// Reads one or more repeated SFixed32 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection<int> list);

 

         /// <summary>

         /// Reads one or more repeated Int64 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadInt64Array(uint fieldTag, string fieldName, ICollection<long> list);

 

         /// <summary>

         /// Reads one or more repeated SInt64 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadSInt64Array(uint fieldTag, string fieldName, ICollection<long> list);

 

         /// <summary>

         /// Reads one or more repeated UInt64 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadUInt64Array(uint fieldTag, string fieldName, ICollection<ulong> list);

 

         /// <summary>

         /// Reads one or more repeated Fixed64 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadFixed64Array(uint fieldTag, string fieldName, ICollection<ulong> list);

 

         /// <summary>

         /// Reads one or more repeated SFixed64 field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection<long> list);

 

         /// <summary>

         /// Reads one or more repeated Double field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadDoubleArray(uint fieldTag, string fieldName, ICollection<double> list);

 

         /// <summary>

         /// Reads one or more repeated Float field values from the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void ReadFloatArray(uint fieldTag, string fieldName, ICollection<float> list);

     }

 }
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ICodedOutputStream.cs b/csharp/src/ProtocolBuffers/ICodedOutputStream.cs
index 64c8065..77de60c 100644
--- a/csharp/src/ProtocolBuffers/ICodedOutputStream.cs
+++ b/csharp/src/ProtocolBuffers/ICodedOutputStream.cs
@@ -85,7 +85,7 @@
         /// <summary>

         /// Writes an unknown field of a primitive type

         /// </summary>

-        [CLSCompliant(false)]

+

         void WriteUnknownField(int fieldNumber, WireFormat.WireType wireType, ulong value);

         /// <summary>

         /// Writes an extension as a message-set group

@@ -114,7 +114,6 @@
         /// <summary>

         /// Writes a uint64 field value, including tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void WriteUInt64(int fieldNumber, string fieldName, ulong value);

 

         /// <summary>

@@ -130,13 +129,11 @@
         /// <summary>

         /// Writes a fixed64 field value, including tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void WriteFixed64(int fieldNumber, string fieldName, ulong value);

 

         /// <summary>

         /// Writes a fixed32 field value, including tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void WriteFixed32(int fieldNumber, string fieldName, uint value);

 

         /// <summary>

@@ -167,7 +164,6 @@
         /// <summary>

         /// Writes a UInt32 field value, including tag, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void WriteUInt32(int fieldNumber, string fieldName, uint value);

 

         /// <summary>

@@ -290,7 +286,6 @@
         /// <summary>

         /// Writes a repeated enumeration value of type T, including tag(s), to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

             where T : struct, IComparable, IFormattable;

 

@@ -367,7 +362,6 @@
         /// <summary>

         /// Writes a packed repeated enumeration of type T, including tag and length, to the stream.

         /// </summary>

-        [CLSCompliant(false)]

         void WritePackedEnumArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)

             where T : struct, IComparable, IFormattable;

     }

diff --git a/csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs b/csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs
index cbab444..063f666 100644
--- a/csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs
+++ b/csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs
@@ -65,8 +65,6 @@
 [assembly: AssemblyFileVersion("2.4.1.555")]

 #endif

 

-[assembly: CLSCompliant(true)]

-

 #if CLIENTPROFILE // ROK - not defined in SL, CF, or PL

 [assembly: AllowPartiallyTrustedCallers]

 #endif

diff --git a/csharp/src/ProtocolBuffers/TextFormat.cs b/csharp/src/ProtocolBuffers/TextFormat.cs
index 747dce4..951cdc0 100644
--- a/csharp/src/ProtocolBuffers/TextFormat.cs
+++ b/csharp/src/ProtocolBuffers/TextFormat.cs
@@ -300,7 +300,6 @@
             }

         }

 

-        [CLSCompliant(false)]

         public static ulong ParseUInt64(string text)

         {

             return (ulong) ParseInteger(text, false, true);

@@ -311,7 +310,6 @@
             return ParseInteger(text, true, true);

         }

 

-        [CLSCompliant(false)]

         public static uint ParseUInt32(string text)

         {

             return (uint) ParseInteger(text, false, false);

diff --git a/csharp/src/ProtocolBuffers/UnknownField.cs b/csharp/src/ProtocolBuffers/UnknownField.cs
index e03477f..7650b9d 100644
--- a/csharp/src/ProtocolBuffers/UnknownField.cs
+++ b/csharp/src/ProtocolBuffers/UnknownField.cs
@@ -339,7 +339,6 @@
             /// <summary>

             /// Adds a varint value.

             /// </summary>

-            [CLSCompliant(false)]

             public Builder AddVarint(ulong value)

             {

                 varintList = Add(varintList, value);

@@ -349,7 +348,6 @@
             /// <summary>

             /// Adds a fixed32 value.

             /// </summary>

-            [CLSCompliant(false)]

             public Builder AddFixed32(uint value)

             {

                 fixed32List = Add(fixed32List, value);

@@ -359,7 +357,6 @@
             /// <summary>

             /// Adds a fixed64 value.

             /// </summary>

-            [CLSCompliant(false)]

             public Builder AddFixed64(ulong value)

             {

                 fixed64List = Add(fixed64List, value);

diff --git a/csharp/src/ProtocolBuffers/UnknownFieldSet.cs b/csharp/src/ProtocolBuffers/UnknownFieldSet.cs
index 09ed680f..aee1b7c 100644
--- a/csharp/src/ProtocolBuffers/UnknownFieldSet.cs
+++ b/csharp/src/ProtocolBuffers/UnknownFieldSet.cs
@@ -446,7 +446,6 @@
             /// <param name="tag">The field's tag number, which was already parsed.</param>

             /// <param name="input">The coded input stream containing the field</param>

             /// <returns>false if the tag is an "end group" tag, true otherwise</returns>

-            [CLSCompliant(false)]

             public bool MergeFieldFrom(uint tag, ICodedInputStream input)

             {

                 if (tag == 0)

@@ -554,7 +553,6 @@
             /// value.  This is used in particular when an unknown enum value is

             /// encountered.

             /// </summary>

-            [CLSCompliant(false)]

             public Builder MergeVarintField(int number, ulong value)

             {

                 if (number == 0)

diff --git a/csharp/src/ProtocolBuffers/WireFormat.cs b/csharp/src/ProtocolBuffers/WireFormat.cs
index a03f165..b9daa32 100644
--- a/csharp/src/ProtocolBuffers/WireFormat.cs
+++ b/csharp/src/ProtocolBuffers/WireFormat.cs
@@ -63,7 +63,6 @@
 

         #endregion

 

-        [CLSCompliant(false)]

         public enum WireType : uint

         {

             Varint = 0,

@@ -95,13 +94,11 @@
         /// <summary>

         /// Given a tag value, determines the wire type (lower 3 bits).

         /// </summary>

-        [CLSCompliant(false)]

         public static WireType GetTagWireType(uint tag)

         {

             return (WireType) (tag & TagTypeMask);

         }

 

-        [CLSCompliant(false)]

         public static bool IsEndGroupTag(uint tag)

         {

             return (WireType) (tag & TagTypeMask) == WireType.EndGroup;

@@ -110,7 +107,6 @@
         /// <summary>

         /// Given a tag value, determines the field number (the upper 29 bits).

         /// </summary>

-        [CLSCompliant(false)]

         public static int GetTagFieldNumber(uint tag)

         {

             return (int) tag >> TagTypeBits;

@@ -120,14 +116,12 @@
         /// Makes a tag value given a field number and wire type.

         /// TODO(jonskeet): Should we just have a Tag structure?

         /// </summary>

-        [CLSCompliant(false)]

         public static uint MakeTag(int fieldNumber, WireType wireType)

         {

             return (uint) (fieldNumber << TagTypeBits) | (uint) wireType;

         }

 

 #if !LITE

-        [CLSCompliant(false)]

         public static uint MakeTag(FieldDescriptor field)

         {

             return MakeTag(field.FieldNumber, GetWireType(field));

@@ -148,7 +142,6 @@
         /// Converts a field type to its wire type. Done with a switch for the sake

         /// of speed - this is significantly faster than a dictionary lookup.

         /// </summary>

-        [CLSCompliant(false)]

         public static WireType GetWireType(FieldType fieldType)

         {

             switch (fieldType)