Merge pull request #675 from jtattermusch/signing

Add ReleaseSigned configuration for C#
diff --git a/Makefile.am b/Makefile.am
index b5868b8..dca8a10 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -46,8 +46,8 @@
   csharp/build_packages.bat                                                  \
   csharp/buildall.sh                                                         \
   csharp/generate_protos.sh                                                  \
-  csharp/keys/Google.Protobuf.snk                                            \
-  csharp/keys/generate_new_key.bat                                           \
+  csharp/keys/Google.Protobuf.public.snk                                     \
+  csharp/keys/README.md                                                      \
   csharp/protos/extest/unittest_issues.proto                                 \
   csharp/src/AddressBook/AddPerson.cs                                        \
   csharp/src/AddressBook/AddressBook.csproj                                  \
diff --git a/csharp/buildall.sh b/csharp/buildall.sh
index d903c1c..45af705 100755
--- a/csharp/buildall.sh
+++ b/csharp/buildall.sh
@@ -6,7 +6,6 @@
 
 # The rest you can leave intact
 CONFIG=Release
-KEYFILE=../keys/Google.Protobuf.snk  # TODO(jtattermusch): signing!
 SRC=$(dirname $0)/src
 
 set -ex
diff --git a/csharp/keys/Google.Protobuf.public.snk b/csharp/keys/Google.Protobuf.public.snk
new file mode 100644
index 0000000..59cd369
--- /dev/null
+++ b/csharp/keys/Google.Protobuf.public.snk
Binary files differ
diff --git a/csharp/keys/Google.Protobuf.snk b/csharp/keys/Google.Protobuf.snk
deleted file mode 100644
index 6bbfc90..0000000
--- a/csharp/keys/Google.Protobuf.snk
+++ /dev/null
Binary files differ
diff --git a/csharp/keys/README.md b/csharp/keys/README.md
new file mode 100644
index 0000000..1a01419
--- /dev/null
+++ b/csharp/keys/README.md
@@ -0,0 +1,5 @@
+Contents
+--------
+
+- Google.Protobuf.public.snk:
+  Public key to verify strong name of Google.Protobuf assemblies.
\ No newline at end of file
diff --git a/csharp/keys/generate_new_key.bat b/csharp/keys/generate_new_key.bat
deleted file mode 100644
index 6af599a..0000000
--- a/csharp/keys/generate_new_key.bat
+++ /dev/null
@@ -1,13 +0,0 @@
-@ECHO OFF

-IF EXIST "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\sn.exe" GOTO FOUND

-goto USEPATH

-

-:FOUND

-"C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\sn.exe" -k %~dp0\Google.Protobuf.snk 

-GOTO EXIT

-

-:USEPATH

-sn.exe -k %~dp0\Google.Protobuf.snk 

-GOTO EXIT

-

-:EXIT
\ No newline at end of file
diff --git a/csharp/src/AddressBook/Properties/AssemblyInfo.cs b/csharp/src/AddressBook/Properties/AssemblyInfo.cs
index e9c40dc..9cb014c 100644
--- a/csharp/src/AddressBook/Properties/AssemblyInfo.cs
+++ b/csharp/src/AddressBook/Properties/AssemblyInfo.cs
@@ -10,20 +10,9 @@
 [assembly: AssemblyConfiguration("")]

 [assembly: AssemblyCompany("")]

 [assembly: AssemblyProduct("AddressBook")]

-[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyCopyright("Copyright ©  2015")]

 [assembly: AssemblyTrademark("")]

 [assembly: AssemblyCulture("")]

 

-// Version information for an assembly consists of the following four values:

-//

-//      Major Version

-//      Minor Version 

-//      Build Number

-//      Revision

-//

-// You can specify all the values or you can default the Build and Revision Numbers 

-// by using the '*' as shown below:

-// [assembly: AssemblyVersion("2.4.1.555")]

-

-[assembly: AssemblyVersion("2.4.1.555")]

-[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
+[assembly: AssemblyVersion("3.0.0.0")]

+[assembly: AssemblyFileVersion("3.0.0.0")]

diff --git a/csharp/src/Google.Protobuf.JsonDump/Properties/AssemblyInfo.cs b/csharp/src/Google.Protobuf.JsonDump/Properties/AssemblyInfo.cs
index a8ce8ea..d980b01 100644
--- a/csharp/src/Google.Protobuf.JsonDump/Properties/AssemblyInfo.cs
+++ b/csharp/src/Google.Protobuf.JsonDump/Properties/AssemblyInfo.cs
@@ -11,20 +11,9 @@
 [assembly: AssemblyConfiguration("")]

 [assembly: AssemblyCompany("")]

 [assembly: AssemblyProduct("ProtoDump")]

-[assembly: AssemblyCopyright("Copyright ©  2009")]

+[assembly: AssemblyCopyright("Copyright ©  2015")]

 [assembly: AssemblyTrademark("")]

 [assembly: AssemblyCulture("")]

 

-// Version information for an assembly consists of the following four values:

-//

-//      Major Version

-//      Minor Version 

-//      Build Number

-//      Revision

-//

-// You can specify all the values or you can default the Build and Revision Numbers 

-// by using the '*' as shown below:

-// [assembly: AssemblyVersion("2.4.1.555")]

-

-[assembly: AssemblyVersion("2.4.1.555")]

-[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
+[assembly: AssemblyVersion("3.0.0.0")]

+[assembly: AssemblyFileVersion("3.0.0.0")]

diff --git a/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj b/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
index eb6d396..d959382 100644
--- a/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
+++ b/csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj
@@ -12,8 +12,6 @@
     <AssemblyName>Google.Protobuf.Test</AssemblyName>

     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

     <FileAlignment>512</FileAlignment>

-    <SignAssembly>true</SignAssembly>

-    <AssemblyOriginatorKeyFile>..\..\keys\Google.Protobuf.snk</AssemblyOriginatorKeyFile>

     <OldToolsVersion>3.5</OldToolsVersion>

     <TargetFrameworkProfile>

     </TargetFrameworkProfile>

@@ -45,6 +43,20 @@
     <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

     <Prefer32Bit>false</Prefer32Bit>

   </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseSigned|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\ReleaseSigned</OutputPath>

+    <IntermediateOutputPath>obj\ReleaseSigned\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <Prefer32Bit>false</Prefer32Bit>

+    <SignAssembly>True</SignAssembly>

+    <AssemblyOriginatorKeyFile>C:\keys\Google.Protobuf.snk</AssemblyOriginatorKeyFile>

+  </PropertyGroup>

   <ItemGroup>

     <Reference Include="mscorlib" />

     <Reference Include="nunit.core, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">

diff --git a/csharp/src/Google.Protobuf.Test/Properties/AssemblyInfo.cs b/csharp/src/Google.Protobuf.Test/Properties/AssemblyInfo.cs
index b551388..d00acf8 100644
--- a/csharp/src/Google.Protobuf.Test/Properties/AssemblyInfo.cs
+++ b/csharp/src/Google.Protobuf.Test/Properties/AssemblyInfo.cs
@@ -12,19 +12,9 @@
 [assembly: AssemblyConfiguration("")]

 [assembly: AssemblyCompany("")]

 [assembly: AssemblyProduct("Google.Protobuf.Test")]

-[assembly: AssemblyCopyright("Copyright �  2008")]

+[assembly: AssemblyCopyright("Copyright ©  2015")]

 [assembly: AssemblyTrademark("")]

 [assembly: AssemblyCulture("")]

 

-// Version information for an assembly consists of the following four values:

-//

-//      Major Version

-//      Minor Version 

-//      Build Number

-//      Revision

-//

-// You can specify all the values or you can default the Build and Revision Numbers 

-// by using the '*' as shown below:

-// [assembly: AssemblyVersion("2.4.1.555")]

-

-[assembly: AssemblyVersion("2.4.1.555")]

+[assembly: AssemblyVersion("3.0.0.0")]

+[assembly: AssemblyFileVersion("3.0.0.0")]

diff --git a/csharp/src/Google.Protobuf.sln b/csharp/src/Google.Protobuf.sln
index a290ae8..fef7a7f 100644
--- a/csharp/src/Google.Protobuf.sln
+++ b/csharp/src/Google.Protobuf.sln
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00

-# Visual Studio 14

-VisualStudioVersion = 14.0.22823.1

+# Visual Studio 2013

+VisualStudioVersion = 12.0.31101.0

 MinimumVisualStudioVersion = 10.0.40219.1

 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Google.Protobuf", "Google.Protobuf\Google.Protobuf.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

 EndProject

@@ -14,24 +14,33 @@
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

 		Debug|Any CPU = Debug|Any CPU

 		Release|Any CPU = Release|Any CPU

+		ReleaseSigned|Any CPU = ReleaseSigned|Any CPU

 	EndGlobalSection

 	GlobalSection(ProjectConfigurationPlatforms) = postSolution

 		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

 		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

 		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

 		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.ReleaseSigned|Any CPU.ActiveCfg = ReleaseSigned|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.ReleaseSigned|Any CPU.Build.0 = ReleaseSigned|Any CPU

 		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

 		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

 		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

 		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.ReleaseSigned|Any CPU.ActiveCfg = ReleaseSigned|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.ReleaseSigned|Any CPU.Build.0 = ReleaseSigned|Any CPU

 		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

 		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Debug|Any CPU.Build.0 = Debug|Any CPU

 		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Release|Any CPU.ActiveCfg = Release|Any CPU

 		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Release|Any CPU.Build.0 = Release|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.ReleaseSigned|Any CPU.ActiveCfg = Release|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.ReleaseSigned|Any CPU.Build.0 = Release|Any CPU

 		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

 		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Debug|Any CPU.Build.0 = Debug|Any CPU

 		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Release|Any CPU.ActiveCfg = Release|Any CPU

 		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Release|Any CPU.Build.0 = Release|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.ReleaseSigned|Any CPU.ActiveCfg = Release|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.ReleaseSigned|Any CPU.Build.0 = Release|Any CPU

 	EndGlobalSection

 	GlobalSection(SolutionProperties) = preSolution

 		HideSolutionNode = FALSE

diff --git a/csharp/src/Google.Protobuf/Google.Protobuf.csproj b/csharp/src/Google.Protobuf/Google.Protobuf.csproj
index c7038eb..8a19067 100644
--- a/csharp/src/Google.Protobuf/Google.Protobuf.csproj
+++ b/csharp/src/Google.Protobuf/Google.Protobuf.csproj
@@ -14,8 +14,6 @@
     <TargetFrameworkProfile>Profile259</TargetFrameworkProfile>

     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

     <FileAlignment>512</FileAlignment>

-    <SignAssembly>true</SignAssembly>

-    <AssemblyOriginatorKeyFile>..\..\keys\Google.Protobuf.snk</AssemblyOriginatorKeyFile>

     <OldToolsVersion>3.5</OldToolsVersion>

     <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

   </PropertyGroup>

@@ -27,7 +25,7 @@
     <IntermediateOutputPath>obj\Debug\</IntermediateOutputPath>

     <DocumentationFile>bin\Debug\Google.Protobuf.xml</DocumentationFile>

     <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

-    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

     <ErrorReport>prompt</ErrorReport>

     <WarningLevel>4</WarningLevel>

     <NoStdLib>true</NoStdLib>

@@ -40,12 +38,27 @@
     <IntermediateOutputPath>obj\Release\</IntermediateOutputPath>

     <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

     <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

-    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <DefineConstants>TRACE</DefineConstants>

     <ErrorReport>prompt</ErrorReport>

     <WarningLevel>4</WarningLevel>

     <NoStdLib>true</NoStdLib>

     <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

   </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseSigned|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\ReleaseSigned</OutputPath>

+    <IntermediateOutputPath>obj\ReleaseSigned\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;SIGNED</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <SignAssembly>True</SignAssembly>

+    <AssemblyOriginatorKeyFile>C:\keys\Google.Protobuf.snk</AssemblyOriginatorKeyFile>

+  </PropertyGroup>

   <ItemGroup>

     <Reference Include="mscorlib" />

     <Reference Include="System" />

diff --git a/csharp/src/Google.Protobuf/Google.Protobuf.nuspec b/csharp/src/Google.Protobuf/Google.Protobuf.nuspec
index 09ec5cf..228457a 100644
--- a/csharp/src/Google.Protobuf/Google.Protobuf.nuspec
+++ b/csharp/src/Google.Protobuf/Google.Protobuf.nuspec
@@ -5,20 +5,32 @@
     <title>Google Protocol Buffers C#</title>
     <summary>C# runtime library for Protocol Buffers - Google's data interchange format.</summary>
     <description>See project site for more info.</description>
-    <version>3.0.0-beta*</version>
+    <version>3.0.0-alpha4</version>
     <authors>Google Inc.</authors>
     <owners>protobuf-packages</owners>
     <licenseUrl>https://github.com/google/protobuf/blob/master/LICENSE</licenseUrl>
     <projectUrl>https://github.com/google/protobuf</projectUrl>
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
-    <releaseNotes>Experimental version of C# Protocol Buffers</releaseNotes>
+    <releaseNotes>C# proto3 support</releaseNotes>
     <copyright>Copyright 2015, Google Inc.</copyright>
     <tags>Protocol Buffers Binary Serialization Format Google proto proto3</tags>
   </metadata>
   <files>
-    <file src="bin/Release/Google.Protobuf.dll" target="lib/portable-net45+netcore45+wpa81+wp8" />
-	<file src="bin/Release/Google.Protobuf.pdb" target="lib/portable-net45+netcore45+wpa81+wp8" />
-	<file src="bin/Release/Google.Protobuf.xml" target="lib/portable-net45+netcore45+wpa81+wp8" />
+    <file src="bin/ReleaseSigned/Google.Protobuf.dll" target="lib/portable-net45+netcore45+wpa81+wp8" />
+	<file src="bin/ReleaseSigned/Google.Protobuf.pdb" target="lib/portable-net45+netcore45+wpa81+wp8" />
+	<file src="bin/ReleaseSigned/Google.Protobuf.xml" target="lib/portable-net45+netcore45+wpa81+wp8" />
 	<file src="**\*.cs" target="src" />
+	<file src="..\..\..\cmake\Release\protoc.exe" target="tools" />
+	<file src="..\..\..\src\google\protobuf\any.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\api.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\duration.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\empty.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\field_mask.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\source_context.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\struct.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\timestamp.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\any.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\type.proto" target="tools\google\protobuf" />
+	<file src="..\..\..\src\google\protobuf\wrappers.proto" target="tools\google\protobuf" />
   </files>
 </package>
diff --git a/csharp/src/Google.Protobuf/Properties/AssemblyInfo.cs b/csharp/src/Google.Protobuf/Properties/AssemblyInfo.cs
index a957e8b..73a78b0 100644
--- a/csharp/src/Google.Protobuf/Properties/AssemblyInfo.cs
+++ b/csharp/src/Google.Protobuf/Properties/AssemblyInfo.cs
@@ -42,31 +42,21 @@
 [assembly: AssemblyConfiguration("")]

 [assembly: AssemblyCompany("")]

 [assembly: AssemblyProduct("Google.Protobuf")]

-[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyCopyright("Copyright ©  2015")]

 [assembly: AssemblyTrademark("")]

 [assembly: AssemblyCulture("")]

 

-// Version information for an assembly consists of the following four values:

-//

-//      Major Version

-//      Minor Version 

-//      Build Number

-//      Revision

-//

-// You can specify all the values or you can default the Build and Revision Numbers 

-// by using the '*' as shown below:

-// [assembly: AssemblyVersion("2.4.1.555")]

-

-[assembly: AssemblyVersion("2.4.1.555")]

-

+#if SIGNED

 [assembly: InternalsVisibleTo("Google.Protobuf.Test, PublicKey=" +

-    "00240000048000009400000006020000002400005253413100040000110000003b4611704c5379" +

-    "39c3e0fbe9447dd6fa5462507f9dd4fd9fbf0712457e415b037da6d2c4eb5d2c7d29c86380af68" +

-    "7cf400401bb183f2a70bd3b631c1fcb7db8aa66c766694a9fb53fa765df6303104da8c978f3b6d" +

-    "53909cd30685b8bc9922c726cd82b5995e9e2cfca6df7a2d189d851492e49f4b76f269ce6dfd08" +

-    "c34a7d98")]

-

-#if !NOFILEVERSION

-[assembly: AssemblyFileVersion("2.4.1.555")]

+    "002400000480000094000000060200000024000052534131000400000100010025800fbcfc63a1" +

+    "7c66b303aae80b03a6beaa176bb6bef883be436f2a1579edd80ce23edf151a1f4ced97af83abcd" +

+    "981207041fd5b2da3b498346fcfcd94910d52f25537c4a43ce3fbe17dc7d43e6cbdb4d8f1242dc" +

+    "b6bd9b5906be74da8daa7d7280f97130f318a16c07baf118839b156299a48522f9fae2371c9665" +

+    "c5ae9cb6")]

+#else

+[assembly: InternalsVisibleTo("Google.Protobuf.Test")]

 #endif

 

+[assembly: AssemblyVersion("3.0.0.0")]

+[assembly: AssemblyFileVersion("3.0.0.0")]

+[assembly: AssemblyInformationalVersion("3.0.0-alpha4")]