diff --git a/SharpDevelop.sln b/SharpDevelop.sln
index 0be6947b64..fd6fc11f3c 100644
--- a/SharpDevelop.sln
+++ b/SharpDevelop.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
-# SharpDevelop 4.2.0.8783
+# SharpDevelop 4.3.0.8807-alpha
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@@ -119,8 +119,6 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
@@ -187,256 +185,232 @@ Global
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Win32.Build.0 = Debug|Any CPU
- {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Win32.ActiveCfg = Debug|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|x86.Build.0 = Debug|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|x86.ActiveCfg = Debug|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Any CPU.Build.0 = Release|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Win32.Build.0 = Release|Any CPU
- {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Win32.ActiveCfg = Release|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|x86.Build.0 = Release|Any CPU
{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|x86.ActiveCfg = Release|Any CPU
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Any CPU.Build.0 = Debug|x86
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Any CPU.ActiveCfg = Debug|x86
- {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Win32.Build.0 = Debug|x86
- {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Win32.ActiveCfg = Debug|x86
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|x86.Build.0 = Debug|x86
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|x86.ActiveCfg = Debug|x86
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Any CPU.Build.0 = Release|x86
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Any CPU.ActiveCfg = Release|x86
- {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Win32.Build.0 = Release|x86
- {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Win32.ActiveCfg = Release|x86
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|x86.Build.0 = Release|x86
{B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|x86.ActiveCfg = Release|x86
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Debug|Win32.Build.0 = Debug|Any CPU
- {17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Debug|Win32.ActiveCfg = Debug|Any CPU
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Debug|x86.Build.0 = Debug|Any CPU
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Debug|x86.ActiveCfg = Debug|Any CPU
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Release|Any CPU.Build.0 = Release|Any CPU
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Release|Win32.Build.0 = Release|Any CPU
- {17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Release|Win32.ActiveCfg = Release|Any CPU
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Release|x86.Build.0 = Release|Any CPU
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}.Release|x86.ActiveCfg = Release|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {83F15BA7-8478-4664-81BB-A82F146D88B3}.Debug|Win32.Build.0 = Debug|Any CPU
- {83F15BA7-8478-4664-81BB-A82F146D88B3}.Debug|Win32.ActiveCfg = Debug|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Debug|x86.Build.0 = Debug|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Debug|x86.ActiveCfg = Debug|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Release|Any CPU.Build.0 = Release|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {83F15BA7-8478-4664-81BB-A82F146D88B3}.Release|Win32.Build.0 = Release|Any CPU
- {83F15BA7-8478-4664-81BB-A82F146D88B3}.Release|Win32.ActiveCfg = Release|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Release|x86.Build.0 = Release|Any CPU
{83F15BA7-8478-4664-81BB-A82F146D88B3}.Release|x86.ActiveCfg = Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.Build.0 = net_2_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
- {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Win32.Build.0 = net_2_0_Debug|Any CPU
- {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Win32.ActiveCfg = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.Build.0 = net_2_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.ActiveCfg = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.Build.0 = net_2_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
- {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Win32.Build.0 = net_2_0_Debug|Any CPU
- {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Win32.ActiveCfg = net_4_0_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.Build.0 = net_2_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.ActiveCfg = net_4_0_Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|Win32.Build.0 = Debug|Any CPU
- {3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|Win32.ActiveCfg = Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|x86.Build.0 = Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Debug|x86.ActiveCfg = Debug|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|Any CPU.Build.0 = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|Win32.Build.0 = Release|Any CPU
- {3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|Win32.ActiveCfg = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|x86.Build.0 = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|x86.ActiveCfg = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Win32.Build.0 = Debug|Any CPU
- {53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Win32.ActiveCfg = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|x86.Build.0 = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|x86.ActiveCfg = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Any CPU.Build.0 = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Win32.Build.0 = Release|Any CPU
- {53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Win32.ActiveCfg = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|x86.Build.0 = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|x86.ActiveCfg = Release|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Debug|Win32.Build.0 = Debug|Any CPU
- {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Debug|Win32.ActiveCfg = Debug|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Debug|x86.Build.0 = Debug|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Release|Any CPU.Build.0 = Release|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Release|Win32.Build.0 = Release|Any CPU
- {DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Release|Win32.ActiveCfg = Release|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Release|x86.Build.0 = Release|Any CPU
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}.Release|x86.ActiveCfg = Release|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Win32.Build.0 = Debug|Any CPU
- {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Win32.ActiveCfg = Debug|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|x86.Build.0 = Debug|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|x86.ActiveCfg = Debug|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.Build.0 = Release|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Win32.Build.0 = Release|Any CPU
- {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Win32.ActiveCfg = Release|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|x86.Build.0 = Release|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|x86.ActiveCfg = Release|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|Win32.Build.0 = Debug|Any CPU
- {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|Win32.ActiveCfg = Debug|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|x86.Build.0 = Debug|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|x86.ActiveCfg = Debug|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|Any CPU.Build.0 = Release|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|Win32.Build.0 = Release|Any CPU
- {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|Win32.ActiveCfg = Release|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|x86.Build.0 = Release|Any CPU
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|x86.ActiveCfg = Release|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|Win32.Build.0 = Debug|Any CPU
- {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|Win32.ActiveCfg = Debug|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|x86.Build.0 = Debug|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|x86.ActiveCfg = Debug|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|Any CPU.Build.0 = Release|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|Win32.Build.0 = Release|Any CPU
- {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|Win32.ActiveCfg = Release|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|x86.Build.0 = Release|Any CPU
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|x86.ActiveCfg = Release|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|Win32.Build.0 = Debug|Any CPU
- {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|Win32.ActiveCfg = Debug|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|x86.Build.0 = Debug|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|Any CPU.Build.0 = Release|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|Win32.Build.0 = Release|Any CPU
- {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|Win32.ActiveCfg = Release|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|x86.Build.0 = Release|Any CPU
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|x86.ActiveCfg = Release|Any CPU
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Debug|Any CPU.Build.0 = Debug|x86
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Debug|Any CPU.ActiveCfg = Debug|x86
- {80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Debug|Win32.Build.0 = Debug|x86
- {80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Debug|Win32.ActiveCfg = Debug|x86
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Debug|x86.Build.0 = Debug|x86
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Debug|x86.ActiveCfg = Debug|x86
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|Any CPU.Build.0 = Release|x86
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|Any CPU.ActiveCfg = Release|x86
- {80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|Win32.Build.0 = Release|x86
- {80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|Win32.ActiveCfg = Release|x86
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|x86.Build.0 = Release|x86
{80F76D10-0B44-4D55-B4BD-DAEB5464090C}.Release|x86.ActiveCfg = Release|x86
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Win32.Build.0 = Debug|Any CPU
- {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Win32.ActiveCfg = Debug|Any CPU
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|x86.Build.0 = Debug|Any CPU
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|x86.ActiveCfg = Debug|Any CPU
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Any CPU.Build.0 = Release|Any CPU
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Win32.Build.0 = Release|Any CPU
- {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Win32.ActiveCfg = Release|Any CPU
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|x86.Build.0 = Release|Any CPU
{F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|x86.ActiveCfg = Release|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Win32.Build.0 = Debug|Any CPU
- {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Win32.ActiveCfg = Debug|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|x86.Build.0 = Debug|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|x86.ActiveCfg = Debug|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|Any CPU.Build.0 = Release|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|Win32.Build.0 = Release|Any CPU
- {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|Win32.ActiveCfg = Release|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|x86.Build.0 = Release|Any CPU
{64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|x86.ActiveCfg = Release|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E954F3CB-A446-492F-A664-2B376EBC86E8}.Debug|Win32.Build.0 = Debug|Any CPU
- {E954F3CB-A446-492F-A664-2B376EBC86E8}.Debug|Win32.ActiveCfg = Debug|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Debug|x86.Build.0 = Debug|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Debug|x86.ActiveCfg = Debug|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Any CPU.Build.0 = Release|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Win32.Build.0 = Release|Any CPU
- {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Win32.ActiveCfg = Release|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|x86.Build.0 = Release|Any CPU
{E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|x86.ActiveCfg = Release|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {70966F84-74C9-4067-A379-0C674A929233}.Debug|Win32.Build.0 = Debug|Any CPU
- {70966F84-74C9-4067-A379-0C674A929233}.Debug|Win32.ActiveCfg = Debug|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Debug|x86.Build.0 = Debug|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Debug|x86.ActiveCfg = Debug|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Release|Any CPU.Build.0 = Release|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {70966F84-74C9-4067-A379-0C674A929233}.Release|Win32.Build.0 = Release|Any CPU
- {70966F84-74C9-4067-A379-0C674A929233}.Release|Win32.ActiveCfg = Release|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Release|x86.Build.0 = Release|Any CPU
{70966F84-74C9-4067-A379-0C674A929233}.Release|x86.ActiveCfg = Release|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|Win32.Build.0 = Debug|Any CPU
- {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|Win32.ActiveCfg = Debug|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|x86.Build.0 = Debug|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|x86.ActiveCfg = Debug|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|Any CPU.Build.0 = Release|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|Win32.Build.0 = Release|Any CPU
- {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|Win32.ActiveCfg = Release|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|x86.Build.0 = Release|Any CPU
{DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|x86.ActiveCfg = Release|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Win32.Build.0 = Debug|Any CPU
- {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Win32.ActiveCfg = Debug|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|x86.Build.0 = Debug|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|x86.ActiveCfg = Debug|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Any CPU.Build.0 = Release|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Win32.Build.0 = Release|Any CPU
- {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Win32.ActiveCfg = Release|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|x86.Build.0 = Release|Any CPU
{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|x86.ActiveCfg = Release|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|Win32.Build.0 = Debug|Any CPU
- {1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|Win32.ActiveCfg = Debug|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|x86.Build.0 = Debug|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|x86.ActiveCfg = Debug|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Release|Any CPU.Build.0 = Release|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1152B71B-3C05-4598-B20D-823B5D40559E}.Release|Win32.Build.0 = Release|Any CPU
- {1152B71B-3C05-4598-B20D-823B5D40559E}.Release|Win32.ActiveCfg = Release|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Release|x86.Build.0 = Release|Any CPU
{1152B71B-3C05-4598-B20D-823B5D40559E}.Release|x86.ActiveCfg = Release|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Win32.Build.0 = Debug|Any CPU
- {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Win32.ActiveCfg = Debug|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|x86.Build.0 = Debug|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|x86.ActiveCfg = Debug|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Any CPU.Build.0 = Release|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Win32.Build.0 = Release|Any CPU
- {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Win32.ActiveCfg = Release|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|x86.Build.0 = Release|Any CPU
{1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|x86.ActiveCfg = Release|Any CPU
+ {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|x86.Build.0 = Debug|Any CPU
+ {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.Build.0 = Release|Any CPU
+ {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.ActiveCfg = Release|Any CPU
+ {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|x86.Build.0 = Debug|Any CPU
+ {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0162E499-42D0-409B-AA25-EED21F75336B}.Release|x86.Build.0 = Release|Any CPU
+ {0162E499-42D0-409B-AA25-EED21F75336B}.Release|x86.ActiveCfg = Release|Any CPU
+ {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|x86.Build.0 = Debug|Any CPU
+ {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Release|x86.Build.0 = Release|Any CPU
+ {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Release|x86.ActiveCfg = Release|Any CPU
+ {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Debug|x86.Build.0 = Debug|Any CPU
+ {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|x86.Build.0 = Release|Any CPU
+ {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|x86.ActiveCfg = Release|Any CPU
+ {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|x86.Build.0 = Debug|Any CPU
+ {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|x86.Build.0 = Release|Any CPU
+ {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|x86.ActiveCfg = Release|Any CPU
+ {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Debug|x86.Build.0 = Debug|Any CPU
+ {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Release|x86.Build.0 = Release|Any CPU
+ {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Release|x86.ActiveCfg = Release|Any CPU
+ {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.Build.0 = Debug|Any CPU
+ {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.Build.0 = Release|Any CPU
+ {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.ActiveCfg = Release|Any CPU
+ {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Debug|x86.Build.0 = Debug|Any CPU
+ {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Release|x86.Build.0 = Release|Any CPU
+ {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Release|x86.ActiveCfg = Release|Any CPU
+ {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.Build.0 = Debug|Any CPU
+ {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.Build.0 = Release|Any CPU
+ {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.ActiveCfg = Release|Any CPU
+ {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|x86.Build.0 = Debug|Any CPU
+ {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|x86.Build.0 = Release|Any CPU
+ {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|x86.ActiveCfg = Release|Any CPU
+ {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.Build.0 = Debug|Any CPU
+ {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.Build.0 = Release|Any CPU
+ {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.ActiveCfg = Release|Any CPU
+ {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|x86.Build.0 = Debug|Any CPU
+ {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.Build.0 = Release|Any CPU
+ {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.ActiveCfg = Release|Any CPU
+ {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.Build.0 = Debug|Any CPU
+ {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.Build.0 = Release|Any CPU
+ {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.ActiveCfg = Release|Any CPU
+ {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|x86.Build.0 = Debug|Any CPU
+ {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|x86.Build.0 = Release|Any CPU
+ {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|x86.ActiveCfg = Release|Any CPU
+ {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|x86.Build.0 = Debug|Any CPU
+ {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|x86.Build.0 = Release|Any CPU
+ {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/data/resources/StringResources.de.resx b/data/resources/StringResources.de.resx
index bc5f5117f2..25972a7c0c 100644
--- a/data/resources/StringResources.de.resx
+++ b/data/resources/StringResources.de.resx
@@ -1498,6 +1498,12 @@ Beispiele: "120", "MainClass", "Main.cs, 120".
Kursiv
+
+ Hervorhebungsfarben exportieren
+
+
+ Hervorhebungsfarben importieren
+
Wert
@@ -2181,11 +2187,14 @@ Wollen Sie die neue Datei zum Projekt ${CurrentProjectName} hinzufügen?
Deaktiviert
- Markierungen und Liniale
+ Markierungen
Markierungen und Liniale
+
+ Lineale
+
Verdeckte Definitionen anzeigen (nur geschweifte Klammern)
@@ -5393,6 +5402,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Kommandozeile hier öffnen
+
+ Ziel-Frameworks wählen
+
+
+ Konnte die Portable Class Library Tools nicht finden.
+
Alle Knoten einklappen
diff --git a/data/resources/StringResources.it.resx b/data/resources/StringResources.it.resx
index 4642534ac8..fe19da92bd 100644
--- a/data/resources/StringResources.it.resx
+++ b/data/resources/StringResources.it.resx
@@ -1860,6 +1860,9 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}?
Stepping
+
+ Decompila codice senza simboli
+
Usa 'Just My Code' per debug passo-passo
@@ -3692,7 +3695,7 @@ ${File}
Proprietà Griglia
- A<ezza
+ &Altezza
Abilita modifica in-linea dei ToolStrips
@@ -4011,6 +4014,9 @@ Sono ammesse solo lettere, numeri, spazi, '.' o '_'.
Il token di chiave pubblica
+
+ Referenzia assembly
+
Versione Specifica
@@ -4056,6 +4062,9 @@ Sono ammesse solo lettere, numeri, spazi, '.' o '_'.
Caricamento ${Filename}...
+
+ Chiudi soluzione
+
Mantieni aperta la vecchia soluzione
@@ -4089,6 +4098,13 @@ Sono ammesse solo lettere, numeri, spazi, '.' o '_'.
Aggiorna Progetto
+
+ Il progetto '${ProjectName}' usa MSBuild ${OldToolsVersion}, ma questa versione non è installata.
+Vuoi aggiornare il progetto a MSBuild ${NewToolsVersion}? Il progetto non può essere aperto senza essere aggiornato.
+
+
+ Aggiorna a MSBuild ${NewToolsVersion}
+
Questa soluzione è stata creata con una versione precedente di SharpDevelop. Potresti volerla aggiornare così da utilizzare le nuove funzionalità del linguaggio o del framework.
@@ -4169,7 +4185,7 @@ Vai a 'Opzioni->Stile visuale' e cambia l'attuale ambiente di linguaggio.ASP.NET/IIS (Express) worker process ({0}) non trovato.
- Non è stato specificato nessun Url di Progetto o programma esterno. Controlla il web server su Proprietà Progetto - Debug.
+ Non è stato specificato nessun Url di Progetto o programma esterno. Controlla il web server sulla linguetta Proprietà Progetto - Web.
Porta server:
@@ -4788,7 +4804,7 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Non si può passare ad una funzione senza simboli di debug.
- Non puoi passare ad una funzione senza simboli senza attivare le opzioni di decompilazione del codice.
+ Non puoi passare ad una funzione senza simboli. Ricompila con i simboli o attiva "Decompila codice senza simboli" nelle opzioni.
[Metodi esterni]
@@ -4946,6 +4962,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Copia il valore negli Appunti
+
+ Nome
+
Membro Non-Pubblico
@@ -4967,6 +4986,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Membri statici
+
+ Tipo
+
+
+ Valore
+
Memoria
@@ -5006,12 +5031,18 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Indirizzo
+
+ (dinamico)
+
Nessun simbolo caricato.
Simboli caricati.
+
+ (in memoria)
+
Ordine
diff --git a/data/resources/StringResources.nl.resx b/data/resources/StringResources.nl.resx
index 5660fe197f..c72858459a 100644
--- a/data/resources/StringResources.nl.resx
+++ b/data/resources/StringResources.nl.resx
@@ -1501,6 +1501,12 @@ Voorbeelden: "120", "MainClass", "Main.cs, 120".
Cursief
+
+ Selectie kleuren expoorteren
+
+
+ Selectie kleuren importeren
+
Waarde
@@ -2184,11 +2190,14 @@ Wilt u het nieuwe bestand toevoegen aan project ${CurrentProjectName}?
Geen
- Markeringen en Linealen
+ Markeringen
Markeringen en Linealen
+
+ Linealen
+
Toon &verborgen definities(alleen haakjes)
@@ -2355,7 +2364,7 @@ Wilt u het nieuwe bestand toevoegen aan project ${CurrentProjectName}?
32 bit Intel-compatibele processor
- Doel Framework:
+ Doel raamwerk:
Behandel waarschuwingen als fouten
@@ -3046,7 +3055,7 @@ Er kan worden gekozen voor opslag van de instellingen in het .user bestand inpla
Bezig met Code Analyse...
- Onbekend doel Mono Framework Versie:
+ Onbekend doel Mono Raamwerk Versie:
Code Analyse
@@ -4090,7 +4099,7 @@ Alleen letters, getallen, spatie, '.' of '_' zijn toegestaan.
Converteer geselecteerde &projecten naar
- Wijzig doel framework
+ Wijzig doel Raamwerk:
Versie van geselecteerde projecten wijzigen
@@ -4105,7 +4114,7 @@ Alleen letters, getallen, spatie, '.' of '_' zijn toegestaan.
<niet wijzigen>
- Doel framework
+ Doel Raamwerk
Project opwaarderen
@@ -4119,7 +4128,7 @@ Zonder opwaarderen kan het project niet geopend wordenh.
Opwaarderen naar MSBuild ${NewToolsVersion}
- Deze oplossing werd met een vorige versie van SharpDevelop gemaakt. Door te upgraden kan gebruik gemaakt worden van nieuwe taal of framework mogelijkheden.
+ Deze oplossing werd met een eerdere versie van SharpDevelop gemaakt. Door te upgraden kan gebruik gemaakt worden van nieuwe taal- of raamwerk mogelijkheden.
Momentele ambience niet gevonden.
@@ -4427,7 +4436,7 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentieWiX localisatie bestanden
- .NET Framework uitbreiding
+ .NET Raamwerk uitbreiding
Geen verschil gevonden.
@@ -5383,6 +5392,27 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie
Open hier de commando prompt
+
+ Selecteer doel-raamwerken.
+
+
+ Kan Portable Klasse-bibliotheek gereedschap niet vinden.
+
+
+ .NET Portable subset
+
+
+ Er moeten tenminste twee raamwerken worden geselecteerd.
+
+
+ Gekozen profiel:
+
+
+ Kies een Portable Bibliotheek profiel.
+
+
+ Om de portabele Klassebibliotheek gereedschappen te installeren zonder Visual Studio te installeren, sla het download bestand op (PortableLibraryTools.exe) op uw computer en voer de installatie uit via de commndoregel. Inclusief de /bouwmachine schakeling op de commandoregel.
+
Alle knooppunten invouwen
@@ -6639,6 +6669,12 @@ De hulpbron bestanden zijn hernoemd/verplaatst op de beschreven wijze.
Gtk# toepassing
+
+ Bibliotheek, bruikbaar bij Windows, Silverlight, Windows Phone en Xbox.
+
+
+ Portable Klassen-bibliotheek
+
Windows installatie project om een MSI installatie programma te maken.
@@ -6790,7 +6826,7 @@ De hulpbron bestanden zijn hernoemd/verplaatst op de beschreven wijze.
Ontkoppel
- Kan .NET Framework versie van het programma niet krijgen. Ga na of het programma een beheerde assembly is.
+ Kan .NET Raamwerk versie van het programma niet oproepen. Ga na of het programma een gemanagede assembly is.
Kan niet bij proces aanhaken.
@@ -6805,7 +6841,7 @@ De hulpbron bestanden zijn hernoemd/verplaatst op de beschreven wijze.
Kan SharpDevelop foutopsporing niet starten omdat kernel foutopsporing is aangezet. Om de kernel foutopsporing uit te zetten, dient de schakeling "/debug" uit bestand Boot.ini verwijderd te worden en de computer opnieuw te worden opgestart.
- Foutopsporing bij .NET Framework 1.0 programmas is niet ondersteund.
+ Foutopsporing bij .NET Raamwerk 1.0 programmas is niet ondersteund.
Kan actie niet uitvoeren omdat er geen foutopsporing van een proces plaatsvindt.
diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx
index f0096690f8..349f8aafef 100644
--- a/data/resources/StringResources.resx
+++ b/data/resources/StringResources.resx
@@ -1550,6 +1550,12 @@ Examples: "120", "MainClass", "Main.cs, 120".
Italic
+
+ Export highlighting colors
+
+
+ Import highlighting colors
+
Value
@@ -2256,11 +2262,14 @@ system. I don't think that it needs translation.
None
- Markers and Rulers
+ Markers
Markers and Rulers
+
+ Rulers
+
Show &hidden definitions (brackets only)
@@ -5698,6 +5707,32 @@ Removed the end part of the original message ", reason '${Message}'" since this
Open command prompt here
+
+ choose target frameworks
+ Option in the "target framework" combobox in the "project upgrade" view that causes the "select portable profile" dialog to appear
+
+
+ Could not find Portable Class Library Tools.
+
+
+ .NET Portable Subset
+ Name for the portable target framework, shown in Project Upgrade view
+
+
+ Two or more frameworks must be selected.
+ Label shown when only 0 or 1 frameworks are selected
+
+
+ Selected profile:
+ Label that shows the selected portable library profile
+
+
+ Select Portable Library Profile
+ Title of the dialog used to pick the target frameworks for a portable library project
+
+
+ To install the Portable Class Library Tools without installing Visual Studio, save the download file (PortableLibraryTools.exe) on your computer, and run the installation program from a Command Prompt window. Include the /buildmachine switch on the command line.
+
Collapse all nodes
@@ -7012,6 +7047,12 @@ The resources files have been renamed/moved accordingly.
Gtk# Application
Name of Gtk# project template.
+
+ Library that can be used on Windows, Silverlight, Windows Phone, and Xbox.
+
+
+ Portable Class Library
+
A windows installer project for creating a MSI installer.
diff --git a/data/resources/StringResources.tr.resx b/data/resources/StringResources.tr.resx
index 87df334241..fc6118ebe1 100644
--- a/data/resources/StringResources.tr.resx
+++ b/data/resources/StringResources.tr.resx
@@ -127,13 +127,13 @@
Kurulumu iptal et
- Güncelleştirmeyi durdur
+ Güncellemeyi iptal et
- Etkisiz kıl
+ Etkisiz
- Etkinleştir
+ Etkin
Yükle
@@ -145,49 +145,49 @@
Güncelle
- Bu eklenti için gerekli bir alt parça bulunamadı. Eklentiyi aktifleştirebilmek için gereken alt parçayı yüklemelisiniz.
+ Bu eklenti için bir bağımlılık bulunamadı. Eklentiyi kullanabilmek için yüklemelisiniz.
- Etkisiz kılınmış
+ Etkisiz
- Eklenti SharpDevelop yeniden başlatıldıktan sonra etkinleştirilecektir.
+ Eklenti SharpDevelop yeniden başlatıldıktan sonra kullanılabilir.
Eklenti SharpDevelop yeniden başlatıldıktan sonra yüklenecektir.
- Bu eklenti iki kez kurulmuştur. Lütfen birini kaldırın.
+ Bu eklenti iki kez kurulmuş. Lütfen birini kaldırın.
Eklentinin Eklenti Yöneticisi tarafindan kullanılmasi için bir <Identity> si olmalıdır
- Eklenti SharpDevelop yeniden başlatıldığında kaldırılacaktır.
+ Eklenti SharpDevelop yeniden başlatıldığında kaldırılacak.
- Eklenti SharpDevelop yeniden başlatıldığında güncellenecektir.
+ Eklenti SharpDevelop yeniden başlatıldığında güncellenecek.
- Eklenti SharpDevelop yeniden başlatıldığında etkisiz hale gelecektir.
+ Eklenti SharpDevelop yeniden başlatıldığında etkisiz olacak.
- Eklenti yöneticisini etkisizleştiremezsiniz çünkü eklentileri yeniden etkinleştirmelisiniz.
+ Eklenti yöneticisini devre dışı bırakamazsınız çünkü eklentileri yeniden etkinleştirmelisiniz.
- ${ProductName} dizinin içine eklenti yükleyemezsiniz,eklentiler otomatik olarak ön yüklemeli olarak algılanacaktır.
+ ${ProductName} dizini içine eklenti yükleyemezsiniz, eklentiler otomatik ön yüklemeli olarak algılanacaktır.
- Seçili eklentilerin kaldırılmasını iptal eder.
+ Seçili eklenti(ler)in kaldırılmasını iptal eder.
- Seçili eklentilerin kurulumunu iptal eder.
+ Seçili eklenti(ler)in kurulumunu iptal eder.
- Seçili eklentilerin güncelleştirilmesini iptal eder.
+ Seçili eklenti(ler)in güncelleştirilmesini iptal eder.
- Seçili eklentiyi etkisiz kılar.
+ Seçili eklentiyi etkisizleştirir.
Seçili eklentiyi etkinleştirir.
@@ -196,20 +196,20 @@
Seçim tutarsız, lütfen sadece aynı durumdaki eklentileri seçin.
- Eklenti yükleme paketi
+ Eklenti Yükleme Paketi
- SharpDevelop Eklentileri|*.addin;*.saddin|All files|*.*
+ SharpDevelop Eklentileri|*.addin;*.sdaddin|All files|*.*
- Eklenti &Kur
+ Eklenti Kur
Kurulu eklenti bulunmamaktadır.
-İnternetten eklenti indirin, 'Eklenti kur' seçeneğine tıklayın ve bunu kurmak için indirdiğiniz dosyayı seçin.
+İnternetten eklenti indirin, 'Eklenti kur' seçeneğine tıklayın ve kurmak için indirdiğiniz dosyayı seçin.
- Web sayfasını aç
+ Web Sitesi Aç
Seçenekler
@@ -221,13 +221,34 @@
Gerekli bağımlılıklar:
- Kurulu eklentileri göster
+ Önyüklenmiş eklentileri göster
Eklenti Yöneticisi
- Tanımlanamayan dosya biçimi:
+ Bilinmeyen dosya biçimi:
+
+
+ Bu dosya tutarsız satırlar içeriyor.
+
+
+ Tutarsız Satırlar
+
+
+ Standartlaştırma
+
+
+ Hata:
+
+
+ Sonrakini bul
+
+
+ Öncekini bul
+
+
+ Düzenli ifadeler kullanın
Sınıf Şemasını Göster
@@ -250,20 +271,29 @@
Yardım Modu
+
+ Seçilen veya yüklü bir yardım kataloğu olmadığından, Kütüphane Yöneticisi Yardımı başlatılamıyor. Yardım ayarlarınızı kontrol ediniz(Araçlar> Seçenekler> Araçlar> Microsoft Yardım Görüntüleyicisi).
+
+
+ Kütüphane Yöneticisi Yardımı bulunamadı. Doğru yüklenmiş olup olmadığını kontrol ediniz.
+
Yüklü Yardım Katalogları
+
+ Kütüphane Yöneticisi Yardımını Başlatınız
+
Microsoft Yardım Görüntüleyici
- Çevrimiçi yardım modunda çevrimdışı bir özellik kullanmaya çalıştın. Bu özelliği kullanabilmek için yardım modunu değiştirmelisin.
+ Çevrimiçi yardım modunda çevrimdışı bir özellik kullanmaya çalıştınız. Bu özelliği kullanabilmek için yardım modunu değiştirmelisiniz.
Ara
- Ne için:
+ Bakın:
Arama
@@ -281,7 +311,7 @@
Çevrimiçi yardımı kullanmak istiyorum
- Tek satırdaki bayt
+ Satır başına bayt değeri
Gösterim
@@ -290,13 +320,22 @@
Veri
- Ofset
+ Denkleştirme
Sayısal sistem
+
+ Ondalık
+
+
+ Onaltılık
+
+
+ Sekizlik
+
- Geçerli genişliğe sığdırmak için boyutlandır
+ Mevcut genişliğe uygun boyutlandır
Geri
@@ -314,7 +353,7 @@
Ana sayfa
- Yer
+ Konum
Yeni Pencere
@@ -329,34 +368,37 @@
Başlık
- Sonuçlar
+ Sonuç
- Birleşik Parçalar
+ Birleştirilmiş Düğümler
- {0} için olan tüm fonksiyonlar
+ {0} için tüm fonksiyonlar
- Seçili SharpDevelop profil oturumu yeni bir SharpDevelop sürümü ile oluşturulmuş ve açılamıyor.
+ Seçili SharpDevelop oturum profili yeni bir SharpDevelop sürümü ile oluşturulmuş ve açılamıyor.
SharpDevelop Profil Oturumu
- Çalıştırılabilir dosya bulunamadığı için proje başlatılamadı, lütfen projenin kendisinin ve tüm bağlantılarının doğruluğundan emin olunuz.
+ Çalıştırılabilir dosya bulunamadığı için proje başlatılamadı, lütfen projenin kendisinin ve tüm bağlantılarının doğruluğundan emin olunuz!
- Açılabilir bir proje bulunamadı. İptal ediliyor...
+ Başlatılabilir proje bulunamadı. Durduruluyor...
+
+
+ Bu proje başlatılamıyor.Yerine Çözüm Başlangıç ​​projesi profili istiyor musunuz?
Analiz için hazırlanıyor...
- COM kayıt istemcisine profil kaydı girilemedi. Profilleme başlatılamıyor.
+ COM kayıt defterine profil kaydı girilemedi. Profilleme başlatılamıyor!
- COM kayıt istemcisinden profil kaydı silinemedi!
+ COM kayıt defterinden profil kaydı silinemedi!
Profil
@@ -365,28 +407,52 @@
Yinelenen çağrıları birleştir.
- İç .NET çağrılarını profilleme.
+ Dahili .NET çağrıları profili yok.
- Verileri sadece bu oturumun sonunda derle.
+ Verileri sadece bu oturumun sonunda kaydet.
- Verilerin derlenmesini hemen oturum açılınca başlat.
+ Verileri oturum açılınca kaydetmeye başla.
Veri Koleksiyonu
- Geçici depolama dosyasının boyutu:
+ Geçici depolama dosyası boyutu:
- Olayları takip et
+ Olayları izle
Profilleme
+
+ Aktif proje profili
+
+
+ Çalıştırılabilir profil seç
+
- Veri geçersiz, lütfen tekrar deneyin.
+ Veri geçersiz, lütfen tekrar deneyin!
+
+
+ Komut satırı argümanları:
+
+
+ İstediğiniz profildeki çalıştırılabilir yolu seçin. İsteğe bağlı olarak, çalışan bir dizin ve komut satırı argümanlarını da belirtebilirsiniz.
+
+
+ Çalıştırılabilir yol:
+
+
+ Profilleme başlat
+
+
+ Çalıştırılabilir Profil
+
+
+ Çalışma dizini:
Veri topla
@@ -394,41 +460,176 @@
Kapat
+
+ Profil kontrol penceresi
+
+
+ Çağrı say
+
+
+ Çağrılar:
+
+
+ Açık sorgu geçmişi
+
+
+ Seçilen veriyi kopyala
+
+
+ Yığın izi kopyala
+
+
+ Seçili fonksiyon çağrılarını bul
+
+
+ Tanıma git
+
+
+ Root/Birleştir olarak ayarla
+
+
+ Fonksiyonları göster
+
+
+ CPU döngüleri:
+
+
+ Sorgu çalıştırma
+
+
+ Seçilen yeni yolu genişletin
+
Ad
+
+ Genel bakış
+
+
+ Sorgu Geçmişi
+
Ara:
+
+ Sorgu çubuğunu göster
+
+
+ Ebeveynin %
+
Geçen süre
+
+ Geçen süre/çağrı
+
+
+ Geçen süre(özel)
+
+
+ Geçen süre(özel)/çağrı
+
- Süre:
+ Zaman:
+
+
+ Oturum Profilleme Analizcisi
+
+
+ En iyi 20
+
+
+ Görüntü yenileniyor, Lütfen bekleyiniz ...
+
+
+ Profilci ile çalıştır
- Ara...
+ Aranıyor ...
+
+
+ Ayarlayıcı ekle
+
+
+ Özelliklerini oluşturmak istediğiniz alanları seçin:
+
+
+ INotifyÖzellikleriDeğişti Uygula
+
+
+ Özellikler oluştur
- Çıkartma yöntemi
+ Çıkarma yöntemi
+
+
+ Seçilen kod kapatılmamış bir döngüde, break ifadesi içeriyor. Lütfen seçiminizi değiştiriniz!
+
+
+ Seçilen kod kapatılmamış bir döngüde continue ifadesi içeriyor. Lütfen seçiminizi değiştiriniz!
+
+
+ Seçilen kod, etiketi olmayan bir goto deyimi içeriyor. Lütfen seçiminizi değiştiriniz!
- Yeni yöntem için bir isim girin
+ Yeni yöntem için bir ad girin
- Geçersiz oturum! Lütfen geçerli bir aralık seçin.
+ Geçersiz seçim! Lütfen geçerli bir aralık seçin.
- Ayırma işlemi sırasında hata oluştu! Yeni bir yöntem açılamadı.
+ Ayrıştırma sırasında hatalar oluştu!Yeni bir yöntem çıkartılamaz.
- {0} içinden çıkarım yöntemi desteklenmemektedir!
+ {0} içinden çıkartma yöntemi şu anda desteklenmemektedir!
+
+
+ Yapılandırıcı ekle
+
+
+ Boşluk kontrolü ekle
+
+
+ Aralık kontrolü ekle
+
+
+ Bununla birlikte bir yapılandırıcı oluşturmak istiyorsanız tüm alanları seçin:
Değişken
+
+ {1} deki {0} yöntemini tanıtma
+
+
+ Geçersiz Equals() ve GetHashCode()
+
- Arayüz ekle {0}
+ {0} arayüz ekle
+
+
+ Aşırı yükleme operatörü ekle
+
+
+ ${otherMethod} geçersiz ekleme
+
+
+ #region ile çevrili
+
+
+ Geçersiz ToString()
+
+
+ ToString() kullanmak istediğiniz alanları seçiniz:
+
+
+ Nitelik dönüştür:{0}
+
+
+ {0} uzantı yöntemini dönüştür
+
+
+ StyleCop ile mevcut projeyi kontrol et
StyleCop ile Kontrol Et
@@ -439,17 +640,32 @@
Engelleme listesine ekle
+
+ Kusur
+
+
+ Branş/Etiket
+
+
+ Bu altsürümün durumu '{0}' olduğundan, dosya / dizin kopyalanamaz.
+
+
+ Bu altsürümün durumu '{0}' olduğundan, dosya / dizin taşınamaz.
+
+
+ Bu altsürümün durumu '{0}' olduğundan, dosya / dizin silinemez.
+
- Modifikasyonlara bak
+ Değişiklikleri kontrol et
- Çıkış
+ Kontrol et
Temizle
- Gönder
+ İşle
Yama oluştur
@@ -464,10 +680,10 @@
Çakışmaları düzelt
- ${File} silinme hatası
+ ${File} silme hatası
- Aktar
+ Dışa Aktar
Hızlı sil
@@ -475,23 +691,41 @@
Geçmiş
+
+ '{0}' yasaklı listesinden çıkarıldı.
+
+
+ Kilitleme
+
+
+ Uyumsuzlukları çözülmüş olarak işaretle
+
Birleştir
- Yeni dosyaları otomatik olarak &ekle
+ Yeni dosyaları kendiliğinden ekle
- Kaldırılan dosyaları otomatik olarak sil
+ Kaldırılan dosyaları kendiliğinden sil
+
+
+ Proje dosya(lar)ı değiştiğinde projeyi güncelle
+
+
+ Altsürümdeki dosyaları(geçmiş kaydı) yeniden adlandır
- Yansürüm Ayarları
+ Altsürüm seçenekleri
+
+
+ Sürüm kontrollü dosyalar için geçmiş sekmesini göster
- Yerleştir
+ Tekrar yerleştir
- Yoksayma listesinden kaldır
+ Yasaklı listesinden kaldır
Dosya bu konuma taşındı, gerçekten silmek istiyor musunuz?
@@ -503,10 +737,10 @@
Geri al
- Bu dosyada yerel değişiklikler yapılmış. Silmek istiyor musunuz?
+ Bu dosyada bazı değişiklikler yapılmış. Geri almak istiyor musunuz?
- Kontrol grafiği
+ Düzeltme grafiği
Dosyaları kaydet
@@ -520,27 +754,122 @@
Değiştir
+
+ Bu eylemi yürütmek için TortoiseSVN yüklü olması gerekmektedir.
+
Güncelle
- Kontrolü yenile
+ Düzeltmeleri güncelle
- Katılımınız için teşekkürler. İstediğiniz zaman SharpDevelop seçeneklerini kullanarak çıkabilirsiniz.
+ Katılımınız için teşekkürler! İstediğiniz zaman SharpDevelop seçeneklerini kullanarak çıkabilirsiniz.
- Katılmak istiyorum. Kullanım bilgilerini topla ve gönder
+ Katılmak istiyorum - Kullanım bilgilerini topla ve gönder
+
+
+ Daha sonra SharpDevelop seçeneklerinden ulaşabilirsiniz.
Katılmak istemiyorum
- Yardım talep ediyoruz! SharpDevelop'ı gelecekte de geliştirebilmek için; En çok kullanılan özelliklerinin hangileri olduğunu bilmek istiyoruz.
+ Sizden yardım bekliyoruz! SharpDevelop'u geliştirebilmek için; en çok kullanılan özelliklerin hangileri olduğunu bilmek istiyoruz.
SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
+
+ Gizlilik Bildirimi
+
+
+ Toplanan verileri göster
+
+
+ Veri Toplayıcı Kullanımı
+
+
+ SharpDevelop'un başlatıcıya dayalı şekillendirmesine izin verme.
+
+
+ Izgara sütun ve satır düzenleme
+
+
+ Stil özelliklerini çıkartma
+
+
+ Geçerli bir öğe seçilmedi!
+
+
+ Özellik/Olay Adı
+
+
+ Seçilen kontrolün zaten atanmış bir stili var.
+Oluşturulan stili yenisiyle değiştirmek istiyor musunuz?
+
+
+ Stil adı:
+
+
+ Özellik Değeri
+
+
+ Grup içine
+
+
+ Kenarı kaldır
+
+
+ Gereksiz özellikleri kaldır
+
+
+ <yeni olay işleyicisi>
+
+
+ Kod tamamlama
+
+
+ Olay rengi:
+
+
+ Olay işleyici desen adı:
+
+
+ XAML vurgulayıcı tarafından kullanılması gereken renkleri seçin:
+
+
+ Vurgulama
+
+
+ Yok Sayılan eleman rengi:
+
+
+ XML ad alanı bildirimi rengi:
+
+
+ Özellik rengi:
+
+
+ Yeni olay işleyicisi yerleştirildikten sonra kodu değiştirme
+
+
+ XAML
+
- Uzantu tamamlamasını kullan
+ Uzantı tamamlama biçimi kullan
+
+
+ Gelişmiş vurgulama kullan
+
+
+ Dosya geçerli kodlama ${encoding} ile veri kaybı olmadan kaydedilemez.
+
+
+
+ Devam
+
+
+ UTF-8 olarak kaydet
Proje dll olarak yapılandırılmış ve hiç bir yürütme komutu belirtilmemiş. Proje seçeneklerinden bir yürütme komutu belirtebilirsiniz.
@@ -558,10 +887,13 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
Hakkında
- Versiyon:
+ Sürüm:
+
+
+ Çeşit
- &Nesneyi Kopyala
+ Nesneyi Kopyala
Metni kopyala
@@ -570,11 +902,14 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
Metin Değerini Kopyala
- Objeyi kes
+ Nesneyi kes
Olay Kaydetme
+
+ Tasarım Görünüşü
+
Nesneyi yapıştır
@@ -587,8 +922,11 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
Favorilerimden çıkar
+
+ TypeLib Kaldır
+
- Açılmış Bileşkeler
+ Açılmış Derlemeler
İliştirmede hata; işlem no {0}.
@@ -597,22 +935,31 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
İşlem
- Ekle
+ İliştir
Tür bulunamadı
- {0} türü, şu anda açık tümleşkelerin herhangi birinde bulunamadı.
+ {0} türü, şu anda açık çevirmelerin herhangi birinde bulunamadı.
+
+
+ Tipi
+
+
+ Tip
- Çevir
+ Tipi
- Çevrim türünü belirlemede hata
+ Tip türü belirlemede hata.
+
+
+ Tipi oturum boyunca hatırla?
- Çevrim türü nesnenin türüyle uyumsuz.
+ Tip türü, nesnenin türüyle uyumsuz.
Bileşen Kategorileri
@@ -624,13 +971,16 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
Arayüzler
- COM Nesneleri
+ Çalışan COM Nesneleri
+
+
+ Favori/Son Erişilen Kütüphane Türleri
Tür Kütüphaneleri
- OK tuşuna bastıktan sonra, eğer parametreli bir kurucu seçerseniz, lütfen parametreleri doldurun ve bu nesnenin nerede oluşturulmasını istiyorsanız, seçili kurucuyu oraya sürükleyin.
+ Eğer parametrelerle bir kurucu seçerseniz, OK tuşuna bastıktan sonra, lütfen parametreleri doldurun ve bu nesnenin nerede oluşturulmasını istiyorsanız, seçili kurucuyu oraya sürükleyin.
Bir Kurucu Seç
@@ -639,31 +989,37 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
Kontroller
- Nesne oluştur
+ Nesne Oluştur
Uygulama Çalışma Dizini
+
+ ActiveX Dönüşüm Derlemeleri
+
Dizinler
- COM özelliklerini otomatik al
+ COM özelliklerini kendiliğinden al
+
+
+ Başlangıçta Çalışan COM Nesnelerini Al
Diğer
- Taban nesne adlarını göster
+ Temel sınıf adlarını göster
Göster
- Temel sınıf kategorisindeki nesne değişkenlerini göster
+ Temel sınıf kategorisindeki nesne üyelerini göster
- Sadece Public üyeler
+ Sadece public üyeler
Kısa Bilgilendirme
@@ -678,7 +1034,7 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
Hepsini sil
- &Sil
+ Sil
Olay
@@ -690,30 +1046,33 @@ SharpDevelop bu bilgileri otomatik olarak toplayıp gönderebilir.
Olay Kaydı
- Çık
+ Artır
Herhangi bir olayı kayıt etmiyorsunuz.
-Olayları kayıt etmek için, Nesneler panelinden bir nesne yada olay seçip, ya sağ tuşa basabilir yada Eylem menüsünden olay kaydetmeyi aktifleştirebilirsiniz.
+Olayları kayıt etmek için, Nesneler panelinden bir nesne yada olay seçip, ya sağ tuşa basabilir yada Eylem menüsünden olay kaydetmeyi etkinleştirebilirsiniz.
Parametreler
+
+ Tüm Günlüğü Durdur
+
- Kaydetmeyi Kes
+ Kaydetmeyi Durdur
- Saat
+ Zaman
Tüm seviyeler
- Tümleşkeler/Türler
+ Derlemeler/Türler
- İçeren
+ İçerir
Bul
@@ -722,7 +1081,7 @@ Olayları kayıt etmek için, Nesneler panelinden bir nesne yada olay seçip, ya
İçinde Bul
- Bul:
+ Aranan:
Öğe
@@ -740,7 +1099,7 @@ Olayları kayıt etmek için, Nesneler panelinden bir nesne yada olay seçip, ya
Bakılıyor:
- Aranan
+ Benzer
Bulunamadı
@@ -767,7 +1126,7 @@ Olayları kayıt etmek için, Nesneler panelinden bir nesne yada olay seçip, ya
Nesne ağacında arama yaparken İsim yada Değerden en az birini seçin.
- {0} ağacından bir boğum seçmek zorundasınız; arama bu boğumdan başlayacak.
+ {0} ağacından bir düğüm seçmek zorundasınız; arama bu düğümden başlayacak.
Öğeyi Göster
@@ -785,26 +1144,29 @@ Olayları kayıt etmek için, Nesneler panelinden bir nesne yada olay seçip, ya
Kültür
- Global Bileşke İsmi
+ Genel Derleme İsmi
- &Aç
+ Aç
- Umumi Anahtar
+ Genel Simge Anahtarı
- Versiyon
+ Sürüm
- COM özelliklerini otomatik getir
+ COM özelliklerini kendiliğinden al
- Başlangıçta çalışan COM nesnelerini getir
+ Başlangıçta çalışan COM nesnelerini al
Paneller
+
+ Derleme Panelini Göster
+
Kontrol Panelini Göster
@@ -812,7 +1174,7 @@ Olayları kayıt etmek için, Nesneler panelinden bir nesne yada olay seçip, ya
GAC Panelini Göster
- Özelliği Getir
+ Özelliği al
Denetleyici herhangi bir ActiveX/COM nesnesini gösterebilir yada işletebilir.
@@ -823,10 +1185,10 @@ ActiveX/COM sekmesinden yüklü COM bileşenlerine göz atın.
Aç menüsünü kullanarak bir tür kütüphanesi yada kontrol dosyası açın.
-To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control to the object tree or design surface.
+Bir ActiveX / COM nesnesi oluşturmak / değiştirmek için, nesne ağacı veya tasarım yüzeyine, TürKütüphanesi/Kontrol içinden bir sınıf sürükleyin.
- Bu Diyaloğu göster
+ Bu iletişimi göster
Başlarken
@@ -835,10 +1197,10 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Tasarım Yüzeyi Kontrolü
- Tasarım Kipi
+ Tasarım Modu
- Tümleşkeyi Kapat...
+ Derlemeyi Kapat...
Bul...
@@ -847,13 +1209,13 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Nesne Ağacı
- Bileşke Aç...
+ Derleme Aç...
Tür İşleyiciler
- İşlevi Çağır
+ Yöntemi Çağır
Denetleyici
@@ -867,20 +1229,26 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Parametreler
+
+ Üst Düzey Nesneler
+
Değer
+
+ Eylem
+
ActiveX Dosyaları
- Bileşke Dosyaları
+ Derleme Dosyaları
İzleme...
- &Dizinler...
+ Dizinler...
Nesne Ağacı...
@@ -889,7 +1257,7 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Açmak için Dosya Seçin
- &Seçenekler
+ Seçenekler
Paneller
@@ -900,23 +1268,26 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
İzleme...
+
+ Tür Eylemcileri...
+
Kategoriler
- Üyelerin sayısı geçerse
+ Üye sayısını aştığında
- Sayıları hex olarak göster
+ Onaltılık tamsayılar
- Taban nesne kategorilerini göster
+ Temel sınıf kategorilerini göster
- Taban sınıf üyeleri
+ Temel sınıf üyeleri
- Taban nesne adları
+ Temel sınıf adları
Olaylar
@@ -934,16 +1305,19 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Üyeleri Göster
- İşlevler
+ Yöntemler
- Taban sınıf kategorisindeki nesne üyelerini göster
+ Temel sınıf kategorisindeki nesne üyelerini göster
Nitelikler
- Nitelik/Olay erişim işlevleri
+ Özellik/Olay erişim yöntemleri
+
+
+ Sadece public üyeler
Çıktı
@@ -952,16 +1326,16 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
nesne seç
- (metinleri boşluk ile ayr)
+ (metinleri boşluk ile ayır)
değer
- Çalışır COM bileşeni ekleme
+ Çalışan COM Nesneleri Ekleme
- Çalışan COM nesneleri eklernirken bekleyin.
+ Çalışan COM nesneleri eklenirken bekleyin.
{0} Bilgisi Alınıyor
@@ -970,25 +1344,25 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Lütfen {0} bilgisi alınırken bekleyin
- Hatırlanan Bileşkeler Yükleniyor
+ Hatırlanan Derlemeler Yükleniyor
- Daha önceden açılan bileşkeleri yüklerken bekleyin.
+ Daha önceden açılan derlemeleri yüklerken bekleyin.
- Sistem kütüğü
+ Sistem kaydı
- Alanı Ata
+ Alanı Ayarla
- Nitelik Ata
+ Özelliği Ayarla
Bileşen Denetleyicisi
- İzleme Seviyesini Ata
+ İzleme Seviyesini Ayarla
İzleme Seviyesi
@@ -997,19 +1371,25 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Ad
- Tür İşleyiciler, aşağıda işaretli sınıfların, gereksiz detaylarını gizleyip, daha uygun bir şekilde sunar.
+ Tür eylemcileri, aşağıda işaretli sınıfların, gereksiz detaylarını gizleyip, daha uygun bir şekilde sunar.
- Uygulamanın başlatılması bekleniyor. Eğer uygulama başlatılamazsa(yada beklemekten ayaklarınıza kara sular inerse), İptal tuşuna basarak iptal edebilirsiniz.
+ Uygulamanın başlatılması bekleniyor. Eğer uygulama başlatılamazsa(veya beklemekten sıkılırsanız), iptal tuşuna basarak iptal edebilirsiniz.
- Uygulamanın başlaması için bekleniyor
+ Uygulamanın Başlatılması Bekleniyor
+
+
+ Kod Kalite Analizi
+
+
+ Açık yönteme referans ekleyin; yeni yöntem eklemek için tab veya enter tuşuna tekrar basın.
- Parametre almayan anonim metot yerleştir.
+ Parametresiz anonim yöntem yerleştir.
- Parametre alan anonim metot yerleştir.
+ Parametreli anonim yöntem yerleştir.
SharpDevelop Hakkında
@@ -1018,16 +1398,16 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Sürüm
- Oluştur
+ Derleme
- ${License} lisansı altında dağıtılmıştır.
+ ${License} altında dağıtılmıştır.
Sürüm Bilgisi
- &Kopyala
+ Kopyala
Sürüm
@@ -1039,16 +1419,61 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
son projeler
- &Tümünü at
+ Tümünü at
- Tümünü &kaydet
+ Tümünü kaydet
- &Kaydet
+ Kaydet
+
+
+ Proje Yapılandırması Ekle
+
+
+ Proje Ortamı Ekle
+
+
+ Çözüm Yapılandırması Ekle
+
+
+ Çözüm Ortamı Ekle
+
+
+ Tüm yapılandırmaları/ortamları silemezsiniz.
+
+
+ '{0}' Gerçekten kaldırmak istiyor musunuz ?
+
+
+ Ayarları kopyala:
+
+
+ Tüm projelerin yapılandırmalarını oluştur
+
+
+ Adı çoğalt.
+
+
+ Proje Yapılandırmalarını Düzenle
+
+
+ Proje Ortamlarını Düzenle
+
+
+ Çözüm Yapılandırmalarını Düzenle
+
+
+ Çözüm Ortamlarını Düzenle
+
+
+ <Boş>
- Yeni ismi girin:
+ Yeni ad girin:
+
+
+ Ad geçersiz.
Git
@@ -1057,7 +1482,7 @@ To create/manipulate a ActiveX/COM object, drag a class within a TypeLib/Control
Satıra git
- Lütfen sıçramak için bir ifade girin.
+ Lütfen atlama yapmak için bir ifade girin.
Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Örneğin: "120", "MainClass", "Main.cs, 120".
@@ -1073,6 +1498,12 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
İtalik
+
+ Renk vurgulamayı dışa aktar
+
+
+ Renk vurgulaması al
+
Değer
@@ -1080,118 +1511,125 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Örnek metin
- Yeni dosyayı şu anki projede kullanmak istiyorsanız, dosyayı projeye eklemelisiniz.\nDosyayı ${CurrentProjectName} projesine eklemek istiyor musunuz?
+ Yeni dosyayı mevcut projede kullanmak istiyorsanız, dosyayı projeye eklemelisiniz.
+Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz?
Proje içinde dosya oluştur
- Tek bir dosya oluştur
+ Bağımsız dosya oluştur
- Dosya projeye eklensin?
+ Projeye dosya eklensin mi?
- &Kategoriler:
+ Kategoriler:
Yeni Dosya
- &Dosya Adı
+ Dosya Adı
Öncelikle özellikleri doldur
- Bu dosyayı oluşturabilmek için öncelikle bazı özellik değerleri belirtmelisiniz.
+ Bu dosyayı oluşturabilmek için öncelikle bazı özellikler belirtmelisiniz.
+
+
+ Seçilen {0} proje dosyası salt okunur özellikte. Yeni dosya projeye eklenmeyecek.
- &Şablonlar:
+ Şablonlar:
+
+
+ Çözüm için dizin oluştur
Yeni Proje
- &Yer:
+ Konum:
- &Ad:
+ Ad:
Projenin oluşturulacağı yer
- &Kategoriler:
+ Kategoriler:
- Düzeni ifadeyi ayrıştırırken hata:
+ Normal ifadeyi ayrıştırırken hata:
Hepsini bul
- &Bul
+ Bul
Bul
- Sonrakini &bul
+ Sonrakini bul
- Bul:
+ Aranan:
- &Alt-dizinleri de ekle
+ Alt-klasörleri de ekle
- Bu dosya &türlerine bak:
+ Bu dosya türlerine bak:
bütün açık belgeler
- Şu anki belge
+ mevcut belge
- Şu anki seçim
+ mevcut seçim
'{0}' dizini bulunamadı.
- Arama yapılacak dizini belirtiniz
+ Arama yapılacak dizini seç
- bütün proje
+ tüm proje
tüm çözüm
- Hepsine &yer imi koy
+ Tümünü yer imle
- Büyük küçük harf eşleştir
+ Eşleştir
Tüm kelimeyi eşleştir
- &Tümünü değiştir
+ Tümünü değiştir
- &Yerine Koy
+ Değiştir
Değiştir
- Yerine Konacak:
+ İle değiştir:
- &Burada Ara:
+ Buraya bak:
Kurallı ifadeler
@@ -1212,43 +1650,53 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Ara ve Değiştir
- &Kullan:
+ Kullan:
Projenin oluşturulacağı dizini seçin.
+
+ Çözüm Adı:
+
- &Şablonlar:
+ Şablonlar:
Arabellek Seçenekleri
- Yeni Grup &ekle
+ Yeni Grup ekle
- Tanımlama
+ Tanım
- Lütfen, dosya uzantıları listesini, noktalı virgül ile ayrılmış bir liste olarak girin(Örnek: .h;.c;.cpp)
+ Lütfen, dosya uzantılarını, noktalı virgül ile ayrılmış bir liste olarak girin.
+(Örnek: .h;.c;.cpp)
+
+
+ Uzantıları düzenle
- &Tanımlama
+ Tanım
Şablonu Düzenle
- &Şablon
+ Şablon
- &Uzantılar
+ Uzantılar
- Anahtar kelime haritalama
+ Anahtar kelime adresleme
+
+
+ Kod şablonu eklemek için Tab tuşuna basın.
- Grubu &kaldır
+ Grup kaldır
Şablon
@@ -1259,23 +1707,32 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Yapılandırma
+
+ Yapılandırma Düzenleyici
+
+
+ <Düzenle>
+
- Platform
+ Ortam
+
+
+ Çözüm yapılandırması:
- &Argümanlar
+ Argümanlar
- &Komut
+ Komut
- Argümanlar için &sor
+ Argümanlar için sor
Çözüm dizini
- Çözüm dosyasının adı
+ Çözüm dosyası adı
Geçerli sütun
@@ -1287,22 +1744,22 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Geçerli metin
- &Nesne dizini
+ Öğe dizini
- Nesne Yolu
+ Öğe Yolu
- Hedef Yolu
+ Hedef Yol
- Nesne uzantısı
+ Öğe uzantısı
Öğe dosya adı
- &Proje dizini
+ Proje dizini
Proje dosya adı
@@ -1311,67 +1768,70 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
#Develop Başlangıç Dizini
- &Hedef dizin
+ Hedef dizin
Hedef uzantı
- Hedef Adı
+ Hedef Ad
- &Başlık
+ Başlık
- &Araçlar
+ Araçlar
- &Çıktı Penceresini kullan
+ Çıktı Penceresi Kullan
- &Çalışılan dizin
+ Çalışılan dizin
- Dışsal Araçlar
+ Harici Araçlar
Önbelleği temizle
+
+ Bir karakter eklendiğinde tamamlama listesini göster
+
- Kod tamamlama detayı ayarları
+ Kod tamamlama detay ayarları
- Aşağıdaki seçenekler dillere özgüdür. bazıları bazı programlama dillerinde yoktur.
+ Aşağıdaki seçenekler dile özgüdür, bazıları tüm programlama dillerinde kullanılamaz.
- Kod tamamlamayı tamamiyle kapatmak için aşağıdaki seçeneği kullanın:
+ Kod tamamlamayı tamamen kapatmak için aşağıdaki seçeneği kullanın:
Virgüle basıldığında ipucunu daha fazla bellek kullanarak yeniden aç
- nesneler
+ Öğeler
Kaydet
- En son kullanılan üyeleri önceden seç
+ Son kullanılan üyeleri öncelikli seç
- Sadece hata ayıklama durumunda
+ Sadece hata ayıklama modu
- İşlev çağrılarını yazarken ipucunu göster
+ Yöntem çağrılarını yazarken ipucunu göster
- anahtarkelimelerden sonra kod tamamlamayı tetikle
+ Anahtarkelimelerden sonra kod tamamlamayı çalıştır
- Fare ifadenin üstüne gelince ipucunu göster
+ Fare, ifadenin üstüne gelince ipucunu göster
- &Üyeler arasına boş satırlar ekle
+ Üyeler arasına boş satırlar ekle
Kod üretme seçenekleri
@@ -1380,31 +1840,70 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Yorum üretme seçenekleri
- &Else kapama paranteziyle aynı satırda
+ Else kapama paranteziyle aynı satırda
- &Ek yorumlar üret
+ Ek yorumlar üret
- &Dokümantasyon yorumlarını üret
+ Belgeleme yorumlarını üret
- Kod bloklarına aynı satırda &başla
+ Aynı satırda kod bloğu başlat
Kod Üretimi
- Tam tip adlarını &kullan
+ Tam tür adlarını kullan
Kodlama
+
+ Hata ayıklama
+
+
+ İstisnalar
+
+
+ Yakalanan istisnaları duraklat
+
+
+ Adımlama
+
+
+ Sembolsüz kod derleme
+
+
+ Adımlama için 'Just My Code' özelliğini kullan
+
+
+ Tüm özelliklerin üzerinde adımla
+
+
+ Ayıklayıcı nitelikleri ile işaretlenmiş kod üzerinden Adımla
+
+
+ Alan özelliklerine erişim üzerinden adımla
+
+
+ Sembolsüz kod üzerinden adımla
+
+
+ Tek satır özellikleri üzerinden Adımla
+
+
+ Semboller
+
+
+ Sembol ve kaynak kodu yolları:
+
- &Başlık
+ Başlık
- &Dil
+ Dil
Standart Başlıkları Düzenle
@@ -1413,16 +1912,22 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Genel
- Dışardan kaydedileni otomatik yükle
+ Kaydedildiyse kendiliğinden yüklerken değiştir
- &Her zaman yedek kopya oluştur
+ Kayıt için geçici dosyaları kullan
+
+
+ Varsayılan dosya kodlama:
+
+
+ Dosyalardaki harici değişiklikleri algıla
Yükle
- Bu belge için &kullanıcı-bazlı ayarları yükle
+ Bu belge için kullanıcı-bazlı ayarları yükle
Yükle/Kaydet
@@ -1431,10 +1936,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Kaydet
- Unix
+ Unix(LF)
+
+
+ Dosyaları silerken geridönüşüm kutusu kullan
- Windows
+ Windows(CRLF)
Biçim
@@ -1446,17 +1954,20 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Sözcük kaydır
- İnşâ ve Çalıştırma seçenekleri
+ Derleme ve Çalıştırma seçenekleri
- Proje yolu yanlış belirtilmiş.
+ Geçersiz proje yolu.
- Başlangıçta en son açılan çözümü yükle
+ Başlarken son açılan çözümü yükle
Projeler ve Çözümler
+
+ Paralel derlenecek proje sayısı:
+
Varsayılan proje konumu:
@@ -1467,28 +1978,46 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Ayarlar
- İnşa hata ile biterse hata sekmesini göster
+ Derleme hatayla biterse hata listesi göster
+
+
+ Çalıştırırken:
+
+
+ İlişkili olarak değiştirilmiş proje ve projeleri derle
+
+
+ Sadece değiştirilmiş projeleri derle
+
+
+ Derlenemedi
+
+
+ Bütün projeleri derle
+
+
+ Geçerli arabirim dili:
Dil seçimi için bir simgeye tıklayın.
- Kullanıcı Arabirim Dili
+ Arabirim Dili
- Tercih ettiğiniz &ambiyansı seçin:
+ Tercih ettiğiniz ortamı seçin:
- Proje gözcüsünde dosya &uzantılarını göster
+ Proje izleyicide dosya uzantılarını göster
- Durum çubuğunu &göster
+ Durum çubuğunu göster
- Araç Çubuğunu Göster.
+ Araç çubuğunu göster.
- Menü ve araç çubukları için mavi stili(Ofis 2003 stili) kullan
+ Menü ve araç çubukları için mavi stili(Ofis 2003 benzeri) kullan
Eğer mümkünse projenin ortamını tercih et
@@ -1503,40 +2032,46 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Yorum Etiketleri
- &Ad
+ Ad
Görev listesi
- &Simge listesi
+ Simge listesi
Davranış
- Düzeltme imi EOL arkasına &taşınabilsin
+ Düzeltme imi EOL arkasına taşınabilsin
- Sekmeleri boşluklara &dönüştür.
+ Sekmeleri boşluklara dönüştür.
+
+
+ "Tanıma Git" için Ctrl + Tıkla kullan
- Süslü ayraçları &otomatik olarak ekle
+ Küme parantezlerini kendiliğinden ekle
Bir şey seçilmediğinde bütün bir satırı kes yada kopyala
+
+ Sanal alanı etkinleştir
+
- Yazarken fare imlecini &gizle
+ Yazarken fare imlecini gizle
- &Girinti
+ Girinti
- &Girinti boyutu
+ Girinti boyutu
- Otomatik
+ Kendiliğinden
Hiçbiri
@@ -1545,7 +2080,7 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Akıllı
- &Fare tekerleği yönü
+ Fare tekerleği yönü
Normal
@@ -1560,25 +2095,31 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Sekmeler
- &Sekme boyutu
+ Sekme boyutu
- &Otomatik olarak şablon eklenmesi
+ Kendiliğinden şablon ekleme
+
+
+ Akıllı girinti kullan
Kod Tamamlama
- Yazıtipini örtüşmesiz olarak &oluştur
+ Yazıtipini kenaryumuşatmalı yap
+
+
+ İşaretçi Değiştirmeyi etkinleştir
- &Kod tamamlamayı etkinleştir
+ Kod tamamlamayı etkinleştir
- &Çifte arabelleklemeyi etkinleştir.
+ Çift arabelleklemeyi etkinleştir.
- &Karakter katlamayı etkinleştir.
+ Katlamayı etkinleştir.
Yazıtipi
@@ -1587,7 +2128,7 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Dosya kodlama
- &Kodlamayı seçin:
+ Kodlamayı seçin:
Boyut:
@@ -1599,13 +2140,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Fare tekeri ile yakınlaştırma
- &Çabuk SınıfTarayıcısı Panelini Göster
+ Çabuk SınıfTarayıcı Panelini Göster
Metin Yazıtipi:
- sütu&nda
+ sütunda
İmleçten Sonra
@@ -1613,23 +2154,32 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
İmleçten Önce
+
+ İmleç satırını göster
+
+
+ Canlandırmayı etkinleştir
+
- &EOL işaretleyicilerini göster
+ Satır sonu işaretçilerini göster
+
+
+ Sembolleri vurgula
- &Eşleşen parantezleri vurgula
+ Eşleşen parantezleri vurgula
- &Yatay cetveli göster
+ Yatay cetveli göster
- &Geçersiz satırları göster
+ Geçersiz satırları göster
- Satır &işaretleyicisi stili
+ Satır işaretçisi stili
- &Satır numaralarını göster
+ Satır numaralarını göster
Tam Satır
@@ -1638,34 +2188,40 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Hiçbiri
- İşaretleyiciler ve Cetveller
+ İşaretleyiciler
İşaretleyiciler ve Cetveller
+
+ Cetveller
+
+
+ Gizli tanımları (sadece parentezler) göster
+
- &Boşlukları göster
+ Boşlukları göster
- &Sekmeleri göster
+ Sekmeleri göster
- Hataların &altını çiz
+ Hataların altını çiz
- Sütun cetvelini &göster
+ Sütun cetvelini göster
- Anahtar kelimelerin otomatik düzeltimesine izin ver
+ Anahtar kelimelerin kendiliğinden düzeltilmesini etkinleştir
- end yapılarının otomatik yerleştirilesini aktifleştir
+ End yapılarının kendiliğinden yerleştirilmesini etkinleştir
- kod biçimlendirme
+ Kod biçimlendirme
- VB'e özel seçenekler
+ VB özel seçenekleri
Metin Düzenleyicisi
@@ -1686,7 +2242,7 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Windows Uygulaması
- Tümleşkenin oluşturulacağı dizini seçin.
+ Derlemenin oluşturulacağı dizini seçin.
Vurgu
@@ -1701,16 +2257,28 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Uygulama
- Uygulama &simgesi:
+ Uygulama simgesi:
- Assembly adı:
+ Derleme adı:
{0} geçerli bir simge dosyası değil.
+
+ Uygulama bildirimi
+
+
+ Bildirim uygulanamıyor
+
+
+ Bildirimi varsayılan yap
+
+
+ Bildirim dosyaları
+
- Çıktı ismi:
+ Çıktı adı:
Çıktı türü:
@@ -1719,16 +2287,16 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Proje dosyası:
- Proje dizini:
+ Proje klasörü:
Proje Bilgisi
- Kök isim boşluğu
+ Root ad alanı:
- Başlangıç nesnesi:
+ Başlangıç öğesi:
Win32 Kaynak Dosyası:
@@ -1740,13 +2308,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Otomatik
- Taban Çıktı Dizini:
+ Temel Ara Çıktı Dizini:
- Hata Ayıklama Bilgisi
+ Hata Ayıklama Bilgisi:
- DLL Taban Adresi:
+ DLL Temel Adresi:
Hatalar ve Uyarılar
@@ -1755,7 +2323,7 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Dosya Hizalaması:
- Tefrika tümleşkesi üret:
+ Serileştirilmiş derleme üret:
Ara Çıktı Yolu:
@@ -1773,13 +2341,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Çıktı Yolu:
- COM işbirlikteliği için kaydet
+ COM Çalışabilirliği İçin Kaydet
Uyarıları Yoksay:
- Hedef İşlemci
+ Hedef İşlemci:
Herhangi bir işlemci
@@ -1788,13 +2356,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Intel 64-bit Itanium işlemci
- AMD 64-bit işlemci
+ x86-64 işlemci
32-bit Intel-uyumlu işlemci
- Hedef Çatı:
+ Hedef Çalışma Çerçevesi:
Uyarıları hata gibi değerlendir
@@ -1806,25 +2374,25 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Hiçbiri
- Duruma özel Uyarılar:
+ Duruma Özel Uyarılar:
Uyarı Seviyesi:
- &XML belgeleme
+ XML belgeleme
- İnşâ Olayları
+ Derleme Olayları
- İnşa-sonrası komut satırı görevi:
+ Derleme-sonrası komut satırı olayı:
- İnşâ-öncesi komut satırı görevi:
+ Derleme-öncesi komut satırı olayı:
- İnşâ-sonrası görevini çalıştır:
+ Derleme-sonrası olayını çalıştır:
Derleme
@@ -1833,7 +2401,7 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Güvensiz koda izin ver
- Aritmetik taşmaları kontrol et
+ Aritmetik taşmayı/yetersizliği kontrol et
Koşullu Derleme Sembolleri:
@@ -1842,10 +2410,10 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Genel
- mscorlib.dll dosyasını kaynak olarak gösterme
+ mscorlib.dll referansını reddet
- Kodu iyileştir
+ Kodu eniyile
Sayısal taşma kontrollerini kaldır
@@ -1854,13 +2422,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
VB Seçenekleri için varsayılan değerler:
- &Konfigurasyon
+ Yapılandırma
- Konfigurasyona özel
+ Özel yapılandırma
- Konfigurasyonu değiştirmek şu anki değerleri kaydedecektir. Devam edilsin mi?
+ Yapılandırmayı değiştirmek mevcut değerleri kaydeder. Devam edilsin mi?
Hata Ayıkla
@@ -1869,7 +2437,7 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Komut Satırı argümanları:
- Harekete Başla
+ Eyleme Başla
URL yi görüntüle:
@@ -1878,13 +2446,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Başlama Seçenekleri
- Dış program çalıştır:
+ Harici program çalıştır:
Başlangıç projesi
- &Çalışılan dizin:
+ Çalışılan dizin:
Tam hata ayıklama bilgisi
@@ -1896,31 +2464,31 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Sadece .pdb dosyaları
- Bu proje türü için yüklenmiş proje seçenekleri paneli yok.
+ Bu proje türü için yüklenmiş proje seçenekleri panelleri yok.
- Platform
+ Ortam
- Platforma özel
+ Ortama özel
Lütfen geçerli bir sayı giriniz.
- Imports
+ Dahil edilenler
- İthal Ekle
+ Dahil et
- İsimboşluğu:
+ Ad alanı:
- Çıkar
+ Dahil edilenleri kaldır
- Proje genelindeki Imports bildirimleri
+ Proje genelinde Dahil Edilenler
Yayınla
@@ -1935,13 +2503,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Daima
- İnşâ proje çıkışını güncellediğinde
+ Derlediğinde proje çıktısını güncelle
- Başarılı inşâda
+ Başarılı derlendi
- Dizin Seç
+ Klasör Seç
İmzalama
@@ -1950,13 +2518,13 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Şifre Değiştir...
- Güçlü isim anahtarı dosyası seç:
+ Güçlü bir ad anahtar dosyası seç:
Tek Tıklamada imzalama
- Tek-Tıkla imzalama şu anda desteklenmiyor.
+ Tek Tıklamada imzalama şu anda desteklenmiyor.
Şifreyi doğrula:
@@ -1977,10 +2545,10 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Sadece Gecikme İmzası
- Gecikme imzalaması yapıldığında, proje çalışmaz yada üzerinde hata ayıklama yapılamaz
+ Gecikme imzalaması yapıldığında, proje çalışmaz yada üzerinde hata ayıklama yapılamaz.
- Bir anahtar adı girmek zorundasınız.
+ Bir anahtar adı girmeniz gerekiyor.
Anahtar dosyayı oluştururken bir hata oluştu.
@@ -1989,10 +2557,10 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Girilen şifreler uyuşmuyor.
- Şifre en az 6 harf uzunluğunda olmalıdır.
+ Şifre en az 6 karakter uzunluğunda olmalıdır.
- Assembly'yi imzala
+ Derlemeyi imzala
sn.exe bulunamadı. .NET Framework SDK' nın bilgisayarınıza yüklü olduğundan emin olun.
@@ -2002,21 +2570,51 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
Bütün yapılandırma ayarlarının önündeki küçük tuşla, ayarın nerede saklanacağını seçebilirsiniz.
-Yapılandırmaya-özel, ayar, farklı yapılandırma seçenekleri(Hata Ayıklama/Yayım) için farklı değerler alabilmesi demektir.
-Ortama-özel, ayar, her bir ortam için farklı değer alabilir demektir.
-Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) içinde saklayabilirsiniz. böylelikle bütün geliştirmenler kaynak kontrol sistemlerinde herhangi bir çakışmaya neden olmaksızın farklı değerler kullanabilir.
+Özel yapılandırma, farklı yapılandırma seçenekleri(Hata Ayıklama/Yayınlama) için farklı değerlerle ayarlayabilmedir.
+Ortama özel, her bir ortam için farklı değer alabilen ayar demektir.
+Ayrıca bir ayarı proje dosyası yerine kullanıcı dosyası(.user-file) içinde saklayabilirsiniz; böylelikle bütün geliştiriciler kaynak kontrol sistemlerinde herhangi bir çakışmaya neden olmaksızın farklı değerler kullanabilir.
- .user dosyasında sakla
+ .user-file'de sakla
+
+
+ Sınıfa Arayüz Ekle
+
+
+ Oluşturulan Ad
+
+
+ Yorum Ekle
+
+
+ Arayüz Adı
+
+
+ Yeni Dosya Adı
+
+
+ Genel Kullanıcı Seç
+
+
+ Yeni sınıf oluştur:
+
+
+ Yararlanılabilir bir sınıf kaynak kodu olmadığı için yöntem doğrudan oluşturulamıyor. Yöntemin bir eklenti yöntemi olarak oluşturulabilmesi için statik bir sınıf seçiniz.
+
+
+ Yöntemi tanıtma
+
+
+ Mevcut sınıfı kullan:
- .NET Assembly Tarayıcısı
+ .NET Derleme Tarayıcısı
Referans Ekle
- Özel tümleşke versiyonu seç
+ Özel derleme sürümü seç
Referans Adı
@@ -2049,7 +2647,7 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
&Seç
- Tip
+ Tür
Sonlandır
@@ -2064,10 +2662,10 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
dosya
- Şu anki dosya br metin dosyası değil dolayısıyla sayılamaz.
+ Mevcut dosya bir metin dosyası değil ve sayılamaz.
- Sayılacak Yer
+ Sayım Yeri
Satırlar
@@ -2076,7 +2674,7 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Proje modunda olmalısınız
- &Başla
+ Başla
toplam
@@ -2084,8 +2682,11 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Sözcükler
+
+ SDK bin klasörlerinden herhangi birinde ${Executable} bulunamıyor.
+
- ${File} dosyası yüklememiyor. Dosya bulunamadı.
+ ${File} dosyası yüklenemiyor. Dosya bulunamadı.
Yükleme sırasında hata
@@ -2105,14 +2706,17 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Kaynak
+
+ Başarısız
+
- &Ekle
+ Ekle
< Geri
- &Gözat...
+ Gözat...
Gözat
@@ -2121,13 +2725,13 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
İptal
- &Değiştir
+ Değiştir
Konum seç
- &Kapat
+ Kapat
Oluştur
@@ -2136,10 +2740,13 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Sil
- &Sil
+ Sil
+
+
+ Hiçbirini Seçme
- &Düzen
+ Düzenle
Hata
@@ -2156,8 +2763,23 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Tamamlandı
+
+ Klasör
+
+
+ Font Stili
+
+
+ Özel
+
+
+ Font seç
+
+
+ Altıçizili
+
- &Yardım
+ Yardım
ID
@@ -2181,16 +2803,16 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
tüm proje
- &Aşağıya Taşı
+ Aşağıya Taşı
- &Yukarıya Taşı
+ Yukarıya Taşı
- Uygulanamaz
+ N/A
- İsim
+ Ad
İleri >
@@ -2202,13 +2824,16 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Tamam
- &Aç
+ Aç
+
+
+ Seçenekler
Yol
- Lütfen ekleyin...
+ Lütfen bekleyin...
Önizleme
@@ -2216,17 +2841,26 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Soru
+
+ Saltokunur
+
Yenile
- &Kaldır
+ Kaldır
Yeniden Adlandır
+
+ Değiştir
+
- Yinele
+ Yeniden dene
+
+
+ Hepsini Seç
Küçük Simgeler
@@ -2250,7 +2884,7 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Tümüne Evet
- Dosya veya dizin adı zaten kullanımda, lütfen bir başka adı seçin.
+ Dosya veya dizin adı zaten kullanımda, lütfen farklı bir ad seçin.
Seçtiğiniz dosya adı kuraldışı karakterler içeriyor. Lütfen başka bir ad seçiniz.
@@ -2258,39 +2892,81 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Aç
+
+ Explorer'da Klasör Aç
+
Birlikte aç...
Program ekle
+
+ Ad Göster:
+
+
+ Program:
+
+
+ Bu dosya için varsayılan Windows uygulamasını kullan
+
+
+ Simge düzenleyici
+
+
+ Kaynak düzenleyici
+
Metin Düzenleyici
+
+ Metin düzenleyici (kodlama seçin)
+
Tümleşik Web Tarayıcısı
+
+ XML düzenleyici
+
+
+ Bu dosyayı açmak için kullanmak istediğiniz programı seçin:
+
Varsayılan
+
+ Birlikte Aç
+
+
+ Varsayılan Olarak Ayarla
+
Bütün dosyaları göster
+
+ {0}'a yeni kaynak dizisi ekle
+
<Yeni ekle>
- Bu ${Count} kaynak anahtarını dosyadan ve bun(lar)a bağlı yerelleştirilmiş kaynak dosyalarının tümünü silmek istediğinizden emin misiniz?
+ Kaynak dosyalarındaki ${Count} kaynak anahtarını ve tüm bağımlı yerelleştirilmiş kaynak dosyalarını kalıcı olarak silmek istediğinizden emin misiniz?
- "${FileName}" dosyasından "${Key}" kaynak anahtarını ve buna bağlı yerelleştirilmiş kaynak dosyalarını silmek istediğinizden emin misiniz?
+ "${FileName}" kaynak dosyasındaki "${Key}" kaynak anahtarını ve tüm bağımlı yerelleştirilmiş kaynak dosyalarını kalıcı olarak silmek istediğinizden emin misiniz?
- Metin kaynakı düzenle
+ Metin kaynağı düzenle
+
+
+ Bu isimde bir kaynak anahtarı zaten var!
Kaynak anahtarı boş olamaz!
+
+ '{0}' kaynak dosyası işlenirken bir hata oluştu.
+
Kayıp kaynak anahtarlarını bul
@@ -2304,10 +2980,10 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Kaynak anahtarı:
- "{0}" anahtarı "{1}" dosyasında bulunamadı.
+ "{0}" kaynak anahtarı "{1}" dosyasında bulunamadı.
- Kayıp kaynak anahtarlarına referans
+ Kayıp kaynak anahtarları referansları
${ResourceKey} 'e referanslar (${ResourceFileName} içindeki)
@@ -2316,7 +2992,10 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Bu kaynak anahtarının tanımı bulunamadı ve değiştirilemedi.
- Yeni kaynak adı girin:
+ Yeni kaynak anahtarı adı girin:
+
+
+ Seçilen kaynak türü 'string' değildir ve düzenlenemez.
Kaynağı ekle
@@ -2334,13 +3013,22 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
{0} içindeki kaynak:
- {0} cinsinden nesne:
+ {0} türünde öğe:
<Bilinmeyen>
+
+ ICSharpCode.Core ana kaynakları gizle
+
+
+ Seçildiğinde, ICSharpCode.Core ana uygulamasının kaynak dosyasında bulunan kaynak anahtarları listelenmez.
+
+
+ Çözümün tamamında bulunan kullanılmayan kaynak anahtarı sayısı.
+
- Kullanılmayan kaynak anahtarı
+ Kullanılmayan kaynak anahtarları
Değer
@@ -2348,6 +3036,9 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Kaynak değeri:
+
+ Tüm ad alanlarındaki öğeleri göstermek için Ctrl + Boşluğa basın
+
Boo Yorumlayıcısı
@@ -2355,7 +3046,7 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
FxCop bulunamadı. Lütfen SharpDevelop seçeneklerinden FxCop kurulum dizinini seçin.
- FxCop kayıt dosyası okunamadı
+ FxCop kayıt dosyası okunamadı:
Mono yüklü değil.
@@ -2369,32 +3060,38 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Kod Analizi
+
+ FxCop ile mevcut projeyi kontrol et
+
FxCop ile Kontrol Et
Seçtiğiniz dizin bütün bir FxCop kurulumu içermiyor.
+
+ FxCop yolunu seç
+
- FxCop aşağıdaki dizinde bulunmuşdur:
+ FxCop aşağıdaki dizinde bulundu:
- FxCop bulunamadı. FxCop 'ı yükleyin, 'FxCop Youlunu seç' i tıklayıp SharpDevelevop 'a nereye yüklediğinizi belirtin.
+ FxCop bulunamadı. FxCop 'ı yükleyin ve SharpDevelevop 'ta 'FxCop yolunu seç' i tıklayıp yükleme konumunu belirtin.
FxCop Yolu
- Kural tümleşkesi ekle/çıkar
+ Kural derlemesi ekle/çıkar
- FxCop bulunamadı - FxCop 'ı yüklediğinizden emin olun.
+ FxCop bulunamadı - FxCop 'ın yüklendiğinden emin olun.
- Kural tümleşkelerini içeren dizini seçin
+ Kural derlemelerini içeren dizini seçin
- Kod Analizini &etkinleştir(CODE_ANALYSIS sabitini tanımlar)
+ Kod Analizini Etkinleştir(CODE_ANALYSIS sabitini tanımlar)
Mevcut kurallar yükleniyor...
@@ -2403,13 +3100,13 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Derlerken Kod Analizini Çalıştır( CODE_ANALYSIS sabitini tanımlar )
- SharpDevelop seçeneklerinden FxCop a yol belirtebilirsiniz.
+ SharpDevelop seçeneklerinden FxCop yolunu belirtebilirsiniz.
Karışık
- Uyrarı yada Hata
+ Uyarı yada Hata
Kural
@@ -2417,6 +3114,9 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
FxCop çalışıyor
+
+ Mesajı önle
+
Kapsanmış Kod
@@ -2439,23 +3139,32 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Hiç kod kapsama dosyası üretilemedi:
- Kod kapsama renkleri
+ Kod Kapsama Renkleri
- Nesneleri &Goster:
+ Öğeleri Göster:
Öğe arkaplanı:
- Öğe önalanı
+ Öğe önplanı:
- AaBbCcDdYyZz
+ AaBbCcXxYyZz
+
+
+ Dışla
+
+
+ Dahil et
Kod kapsama çalıştırılıyor...
+
+ Kod Kapsamayı Göster
+
Kaynak Kodunu Göster
@@ -2463,22 +3172,61 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Ziyaret Sayısını Göster
- Kod Kapsamayı Ters çevir
+ Kod Kapsamaya Geç
- Tekrar Edilme Sayısı
+ Ziyaret Sayısı
Tanımlama
- Alınan Exception
+ İstisna yap
- Exception göster
+ İstisna göster
+
+
+ Ek seçenekler
+
+
+ Bağlantı sağlayıcı
+
+
+ Bağlantı ek dosyaları
+
+
+ Belirtilen .NET modülleri bağlantısı
+
+
+ Hata ayıklama bilgisi üret
+
+
+ Kütüphane dosyaları konumları
+
+
+ Gömülü .NET kaynak dosyası
+
+
+ Önişlemci
+
+
+ Takipeden önişlemci sembollerini tanımla
+
+
+ Başlık dosyaları yerleşimi
+
+
+ Tüm tanımlı önişlemci sembollerini tanımsız yap
+
+
+ Takipeden önişlemci sembollerini tanımsız yap
+
+
+ Sembol
- .NET Resource Dosyası(ikili)
+ .NET Kaynak Dosyası(ikili)
C# Kaynak Dosyası
@@ -2490,7 +3238,7 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
Proje
- .NET Resource Dosyası
+ .NET Kaynak Dosyası
SharpDevelop Çözümü
@@ -2502,12 +3250,12 @@ Ayrıca bir ayarı proje dosyası yerine .kullanıcı-dosyası(.user-file) için
XML Dokümanı
- NAnt bulunamadı '{0}'.
+ NAnt '{0}' bulunamıyor.
Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının yerini ayarlayın.
- NAnt inşâsı durduruldu.
+ NAnt derlemesi durduruldu.
Projede bir '.build' dosyası yok.
@@ -2516,10 +3264,10 @@ Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının ye
NAnt Çalıştırılıyor.
- NAnt 'ı durdurmak istediğinizden emin misiniz?
+ NAnt süreci sona erecek. Emin misiniz?
- İnşâ Dosyası Oluştur
+ Derleme Dosyası Oluştur
Tanıma Git
@@ -2531,7 +3279,7 @@ Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının ye
Argümanlar
- İnşa Dosyası Üretme
+ Derleme Dosyası Üretimi
Komut
@@ -2552,25 +3300,25 @@ Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının ye
Logoyu Göster
- detaylı çıktı
+ Detaylı
- NAnt özwlliklerini girin.
+ NAnt özelliklerini gir.
- İnşâ dosyalarını yeniden yükler.
+ Derleme dosyalarını yeniden yükle
- Seçili hedefi çalıştırır
+ Seçili hedefi çalıştır
- Şu anki inşayı durdurur
+ Mevcut derlemeyi durdur
- İşleyen bir süreç yok.
+ Çalışan bir süreç yok.
- Projeyi Temizle
+ Hedefi Temizle
Varsayılan Hedefi Çalıştır
@@ -2579,7 +3327,10 @@ Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının ye
Hedefi Çalıştır
- NAnt 'ı Durdur
+ NAnt'ı Durdur
+
+
+ Hata ayıklamak için başlangıç ​​projesi yok.
Unit Testleri
@@ -2609,27 +3360,57 @@ Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının ye
Daha fazla bilgi
- '{0}' dili için herhangi bir imza bulunamadı.
+ '{0}' dili için bir imza bulunamadı.
- Hiçbir ize rastlanmadı.
+ İmza bulunamadı.
PInvoke imzaları ekle...
+
+ C#'tan Python'a
+
+
+ VB.NET'ten Python'a
+
+
+ Python Konsolu
+
+
+ Python Dosyaları
+
+
+ Python Proje Dosyaları
+
+
+ Satırı Python Konsola Gönder
+
Python Konsoluna Gönder
+
+ '{0}' türü bulunamıyor. Bir derleme bilgisi eksik olabilir mi?
+
+
+ Seçilen eleman sınıfsız veya geçersiz bir üye, bu yüzden türetilmemiş semboller gösterilebilir.
+
+
+ İmleç konumu tanım türü bulunamadı.
+
+
+ Satırı Ruby Konsoluna Gönder
+
Ruby Konsoluna Gönder
- ${Path} altındaki ${FileNameWithoutPath} dosyası yüklenemiyor.
-Dosya varlığını ve izin durumunu kontrol et.
+ ${Path} yolundaki ${FileNameWithoutPath} dosyası yüklenemiyor.
+Dosya varlığını ve izinlerini kontrol edin.
- ${Path} altındaki ${FileNameWithoutPath} dosyası kaydedilemiyor.
-Başka bir dosya adı seçin veya dizinin var olduğundan ve o konuma dosya yazılmasına izniniz olduğundan emin olun.(belki yazma-koruma problemi olabilir?)
+ ${Path} yolundaki ${FileNameWithoutPath} dosyası kaydedilemiyor.
+Başka bir dosya adı seçin veya dizinin var olduğundan ve o konuma dosya yazmaya izniniz olduğundan emin olun.(belki yazma-koruma problemi olabilir?)
Tarayıcı
@@ -2638,32 +3419,32 @@ Başka bir dosya adı seçin veya dizinin var olduğundan ve o konuma dosya yaz
C# 'dan VB.NET'e
- Hata ayıklama yerleştirmesi
+ Hata ayıklama düzeni
- Varsayılan yerleştirme
+ Varsayılan düzen
<Düzenle>
- Düzen EKle
+ Düzeni ekle
- Kullanıcı tanımlı sayfa düzeni listesini düzenle:
+ Kullanıcı tanımlı düzenler listesini şekillendir:
- Tertipleri Düzenle
+ Düzenleri Şekillendir
- Düz yerleştirme
+ Plan düzeni
- <Varsayılana Sıfırla>
+ <Varsayılana ayarla>
- Sayfa düzeni yapılandırmasını sıfırlamak istediğinizden emin misiniz?
-Not: Bu özel düzenlemeleri etkilemez.
+ Yapılandırma düzenini sıfırlamak istediğinizden emin misiniz?
+Not: Bu işlem özel düzenlemelerinizi etkilemez.
Dönüştür
@@ -2675,76 +3456,80 @@ Not: Bu özel düzenlemeleri etkilemez.
Dönüştürme Sonuçları
- ${FileName} dosyasını çevirirken ${ErrorCount} hata.
+ ${FileName} dosyasını dönüştürürken ${ErrorCount} hata(ları).
- Önce kaynak kodundaki hataları düzeltin(sadece hatasız kodlar çevrilebilir).
+ Önce kaynak kodundaki hataları düzeltin(sadece hatasız kodlar dönüştürülebilir).
- ${FileName} çevrilmedi:
+ ${FileName} dönüştürülmedi:
- Parçalayıcı ${ErrorCount} adet hata buldu.
+ Çözümleyici ${ErrorCount} adet hata buldu.
- SharpDevelop Proje Çevirici
+ SharpDevelop Proje Dönüştürücü
- Kaynak Dizin
+ Kaynak Dizini
- {0} zaten var, çevrilemedi.
+ {0} zaten var, dönüştürülemedi.
Hedef dizin
- C# dan Boo ya
+ C#'tan Boo'ya
- VB.NET den Boo ya
+ VB.NET'ten Boo'ya
'${FileName}' dosyası açılamıyor. Geçerli bir çözüm veya proje dosyası değil.
- SharpDevelop '${SolutionName}' adlı çözümü yükledi, fakat çözüm, '${ProjectName}' isimli projeyi içermiyor.
+ SharpDevelop '${SolutionName}' çözümünü yükledi; fakat '${ProjectName}' projesini içermiyor.
+
+
+ '${ProjectName}' projesini '${SolutionName}'çözümüne ekle
'${ProjectName}' için yeni bir çözüm oluştur.
- YazdırılacakBelge oluşturulamadı
+ Belgeyazdır oluşturulamadı
- Bu isme sahip bir yazma-korumalı dosya belirtilen konumda zaten var.
+ Belirtilen konumda bu isimde bir yazma-korumalı dosya zaten var.
+
- Yüklü proje türünü işletebilecek bir mekanizma yok.
+ Yüklü proje türü için arkaplan yok.
- Proje dosyası bulunmuş olamaz.
+ Proje dosyası bulunamıyor.
- Kaynaklar
+ Referanslar
- Web hizmeti tanımı okunamadı. Url='{0}'
+ Web servisi tanımı okunamadı. Url='{0}'
- Çözüm Birimleri
+ Çözüm Öğeleri
Çözüm
- Bu dosya artık yok.
+ Dosya artık bulunamıyor.
Dosyayı yeniden yüklemek istediğinizden emin misiniz ? Tüm değişiklikler kaybedilecek.
- ${LanguageBinding} dil bağlaması ${FileName} dosyasını derleyemiyor.
+ ${LanguageBinding} dil bağlayıcısı ${FileName} dosyasını derleyemiyor.
Dosya kaydedildi
@@ -2755,17 +3540,20 @@ Not: Bu özel düzenlemeleri etkilemez.
Dosya Kaydedildi
+
+ Proje tarayıcı dosyasında gezinin
+
VB.NET 'den C# 'a
- (+${NumOverloads} aşırı yükleme)
+ (+${NumOverloads} taşmaları)
- ${CurrentMethodNumber} taneden ${NumberOfTotalMethods}.
+ ${NumberOfTotalMethods} ${CurrentMethodNumber} .
- ${File} dosyası harici olarak değiştirilmiş, yeniden yüklemek ister misiniz?
+ ${File} dosyası dışarıdan değiştirilmiş. Yeniden yüklemek ister misiniz?
Artan Arama:
@@ -2776,6 +3564,12 @@ Not: Bu özel düzenlemeleri etkilemez.
(dökümanın sonuna ulaşıldı)
+
+ Artan Ters Arama:
+
+
+ ${Filename} dosyasından ${Assembly} için kod tamamlama bilgisi yükleme hatası:
+
Devam Et
@@ -2786,25 +3580,25 @@ Not: Bu özel düzenlemeleri etkilemez.
SharpDevelop'u Kapat
- SharpDevelop 'da anlaşılamayan bir hata oluştu. Bu hatayı beklemiyorduk, bu hatayı SharpDevelop takımına ileterek bize SharpDevelop'ı geliştirmemizde yardım etmenizi isteriz.
+ SharpDevelop'ta bilinmeyen bir hata oluştu. Bu hatayı beklemiyorduk; hatayı SharpDevelop takımına ileterek SharpDevelop'u geliştirmemizde yardımcı olmanızı bekliyoruz.
- Hataları nasıl en iyi şekilde bildirebilirim: Takım üyeleri için gerekli soruları en aza indirebilmek ve SharpDeveleop'ın kullanıcıları tarafından tespit edilen hataların rapor ve takip edilebilmesi için web tabanlı bir forum kurduk. Hata raporlamada daha kolay kopyala-yapıştır için panoya kopyalanan mesaja ek olarak, sizden hatanın nasıl yeniden oluşturulabileceği konusunda mümkün olduğunca detaylı adım-adım anlatım sunmanızı istiyoruz.
+ Hata raporlarını en iyi şekilde nasıl bildirebilirsiniz: Takım üyeleri için gerekli soruları en aza indirebilmek ve SharpDeveleop kullanıcıları tarafından tespit edilen hataların raporlanması ve takibi için web tabanlı bir forum kurduk. Hata raporunu forum mesaj panosuna daha kolay kopyala-yapıştıra ek olarak, hatanın nasıl yeniden oluşturulabileceği konusunda mümkün olduğunca detaylı adım-adım anlatım sunmanızı istiyoruz.
- SharpDevelop dan çıkmak istediğinizden emin misiniz? Kaydeilmemiş değişiklikler kaybolacak!
+ SharpDevelop dan çıkmak istediğinizden emin misiniz? Kaydedilmemiş değişiklikler kaybedilecek!
Hatayı SharpDevelop Takımına bildir.
- SharpDevelop'ı herkes için daha iyi bir program olmasına yardım eden herkese teşekkürler!
+ SharpDevelop uygulamasının daha iyi olması için yardım eden herkese teşekkürler!
- Yönetilmeyen bir exception oluştu
+ Bilinmeyen istisna oluştu
- Form yüklenemiyor. Muhtemel sebep: Bileşenleri başlat işlevi elle değiştirilmiş.
+ Form yüklenemiyor. Muhtemel sebep: bileşen başlat yöntemi elle değiştirilmiş.
'${RootComponent}' bileşeni için kök tasarımcı oluşturulamadı.
@@ -2816,16 +3610,16 @@ Not: Bu özel düzenlemeleri etkilemez.
Tasarımcı yüklenirken hata:
- Tümleşke
+ Derleme
Konum
- Uzayalanı
+ Ad alanı
- E&klenilecek bileşenler
+ Eklenilecek bileşenler
Özel
@@ -2837,7 +3631,7 @@ Not: Bu özel düzenlemeleri etkilemez.
Lütfen geçerli bir dosya adı girin.
- Geçerli bir .NET tümleşkesinin dosya adını girin.
+ Lütfen geçerli bir .NET derlemesi dosya adı girin.
Sürüm
@@ -2846,16 +3640,16 @@ Not: Bu özel düzenlemeleri etkilemez.
GAC
- ${Name} tümleşkesi herhangi bir bileşen içermiyor.
+ ${Name} derlemesi herhangi bir bileşen içermiyor.
- &Dosya Adı
+ Dosya Adı
- Bileşenler &Ekle
+ Bileşenler Ekle
- Tümleşke
+ Derleme
Kategoriler
@@ -2864,40 +3658,61 @@ Not: Bu özel düzenlemeleri etkilemez.
Kenarçubuğunu Yapılandır
- İsimboşluğu
+ Ad alanı
- &Yeni
+ Yeni
- Bu kategoriyi çıkarmak istediğinizden emin misiniz?
+ Bu kategoriyi silmek istediğinizden emin misiniz?
Bileşenleri Kaldır
- Kategoriden seçili bileşenleri çıkarmak istediğinizden emin misiniz?
+ Kategoriden seçili bileşenleri silmek istediğinizden emin misiniz?
Yeniden Adlandır
+
+ Dışardan al...
+
+
+ Yerel kaynak
+
+
+ Hayır
+
+
+ Önizleme
+
+
+ Proje kaynağı
+
+
+ Kaynak seç
+
Üretilmiş kod
- Kod görünümünde InitializeComponents işlevini sadeceokunabilir olarak işaretle
+ Saltokunur kod görünümünde BileşenleriBaşlat yöntemini işaretle
Genel
+
+ Visual Studio Stili Olay Eylemcileri Üret
+
Izgara Özellikleri
- &Yükseklik
+ Yükseklik
- Araç Şeritlerinin üstünde düzenlemeye izin ver
+ Araç çubuklarını düzenlemeyi etkinleştir
En iyileştirilmiş kod üretimini kullan
@@ -2906,34 +3721,52 @@ Not: Bu özel düzenlemeleri etkilemez.
Izgara Seçenekleri
- Özellikler tepisisi ayarları
+ Özellik doldurma ayarları
- Özellikleri alfabetik olarak sırala
+ Özellikleri alfabetik sırala
- Izgarayı &Göster
+ Izgarayı Göster
- Akıllı Etiketleri otomatik aç
+ Akıllı Etiketleri kendiliğinden aç
Akıllı Etiketleri Kullan
- Izgaraya Uydur
+ Çizgi Çek
- Hizalama Durumu
+ Hizalama Modu
- Izgaraya H&izalan
+ Izgaraya Hizala
- Izgaraya Uydur
+ Izgaraya Hizala
- &Genişlik
+ Genişlik
+
+
+ Yeni olay işleyicilerine "TODO" komutu ekle
+
+
+ Özellik atama (küçük sayıların özellikleri için hızlı, fakat büyük sayıların özellikleri için kötü sonuç)
+
+
+ Varsayılan yerelleştirme modeli
+
+
+ Mevcut değişmeyen formların yerelleştirme modelini terket
+
+
+ Yerelleştirme Modeli
+
+
+ Özellik yansıması (birkaç özellik için çalışma zamanında yavaş,ama büyük sayıların özellikleri için daha iyi sonuçlar, bilhassa birçok varsayılan değer ile)
Windows Form Tasarımcısı
@@ -2942,7 +3775,7 @@ Not: Bu özel düzenlemeleri etkilemez.
Kategori Adı
- Zaten var, başka isim seçin.
+ Ad zaten var, başka bir tane seçin.
Yeni Kategori
@@ -2954,15 +3787,21 @@ Not: Bu özel düzenlemeleri etkilemez.
Bileşenleri Göster
- Kısır döngüye neden olacak bir bileşen eklemeye çalışıyorsunuz.
+ Bir sonsuz döngüye neden olacak bileşen eklemeye çalışıyorsunuz.
- Form Tasarımcısı için bileşen oluştururken hata( bileşen, kurucusunda bir hata oluşturdu).
+ Form Tasarımcısı için bileşen oluştururken istisna (bir bileşen, kurucuda bir istisna oluşturdu).
BU KAYNAK KODUNU ETKİLEMEZ.
+
+ Tasarımcı yüklenemedi. Sözdizimi hataları için kaynak kodunu ve tüm yararlanılabilir referansları kontrol edin.
+
+
+ Tasarımcı içeriği temizlemek için çalışırken bir veya daha fazla hata oluştu. Form/kontrol üzerinde bir özel / üçüncü parti bileşende bilinmeyen bir istisna olabilir.
+
Kenar çubuğu bileşen kütüphanesi yüklenemedi.
-Hiçbir Windows form bileşeni erişilemeyecek, lütfen kenar çubuğunu elle ayarlayın( bir kenar çubuğuna sağ tıklayın kategori->Kenar Çubuğu Özelleştir 'i seçin)
+Windows Forms bileşenleri yok, lütfen kenar çubuğunu elle ayarlayın( bir kenar çubuğuna sağ tıklayıp kategori->Kenar Çubuğu Özelleştir 'i seçin)
Özel Bileşenler
@@ -2992,13 +3831,13 @@ Hiçbir Windows form bileşeni erişilemeyecek, lütfen kenar çubuğunu elle ay
Git
- İsimboşluğu geçersiz karakterler içeriyor. Bir isimboşluğu sadece harf, rakam yada alttan-tire içerebilir.
+ Ad alanı geçersiz karakterler içeriyor. Bir ad alanı sadece harf, rakam yada alt-tire içerebilir.
- Referans adı geçersiz karakterler içeriyor.
+ Referans ad geçersiz karakterler içeriyor.
- İsimboşluğu:
+ Ad alanı:
Parametreler
@@ -3013,7 +3852,7 @@ Hiçbir Windows form bileşeni erişilemeyecek, lütfen kenar çubuğunu elle ay
Yenile
- Elde edilen URI
+ Erişim URI
Servis
@@ -3028,25 +3867,34 @@ Hiçbir Windows form bileşeni erişilemeyecek, lütfen kenar çubuğunu elle ay
Değer
- Mevcut Web Hizmetleri
+ Yararlanılabilir Web Servisleri
Bağla
+
+ Yönetilen
+
+
+ İşleme Ekle
+
Çıktı dizini oluşturulamıyor.
-Gerekli erişim hakkınız olduğundan emin olun.
+Erişim haklarınızı kontrol edin.
Geçersiz proje adı.
Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
- Geçersiz proje adı: proje adları '.' ile bitmez.
+ Geçersiz proje adı: proje adı '.' ile bitmez.
Geçersiz proje adı: proje adı harf ile başlamalıdır.
+
+ Proje konumu için geçerli bir yol belirtmeniz gerekir.
+
SharpDevelop ile ilişkilendirmek istediğiniz dosya türlerini seçin:
@@ -3054,16 +3902,16 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Dosya Türü İlişkileri
- Uygulama başlangıcında dosya türlerini ilişkilendir.
+ Uygulama başlarken dosya türlerini ilişkilendir.
- Büyük-Küçük harf duyarlı
+ Büyük-küçük harf duyarlı
Sıralama Seçenekleri
- Boşklukları yoksay
+ Boşluk sonlarını yoksay
Aynı satırları çıkar
@@ -3077,6 +3925,9 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Azalan
+
+ Araç bulunamadı
+
Kimlik Tanımlama
@@ -3084,7 +3935,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Alan:
- Lütfen belirtilen url ye erişebilmek için gerekli kimlik bilgilerini verin.
+ Lütfen belirtilen url'ye erişebilmek için gerekli kimlik bilgilerini verin.
Şifre:
@@ -3095,59 +3946,83 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Kullanıcı adı:
+
+ Taslak
+
+
+ Taslak görünümü geçerli belge için mevcut değil.
+
Yükleniyor...
- &Sıfırla
+ Sıfırla
- Tanımlamayı &Göster
+ Tanımlamayı Göster
- Sıfırlama başarısız. Sebep: Başka bir özelliğin değişmesinden ötürü sıfırlama değeri şu an gerçersiz olabilir.
+ Sıfırlama başarısız. Sebep: Başka bir özelliğin değişmesinden ötürü sıfırlama değeri şu an geçersiz olabilir.
Ayrıştırılıyor
- İnşâ İşlemi
+ Derleme İşlemi
- O dosyanın inşa eylemi
+ O dosyanın derleme işlemi
Çıktı dizinine kopyala
- Dosyanın çıktı dizinine kopyalanıp kopyalanmayacağını belirtir.
+ Dosyanın, çıktı dizinine kopyalanıp kopyalanmayacağını belirtir.
Özel Araç
- Dosyayı çıktıya çeviren aletin adını belirler.
+ Dosyayı çıktıya dönüştüren aracı belirtir.
- Özel Alet İsimBoşluğu
+ Özel Araç Ad alanı
- Çıktısını yerleştiren isimboşluğu özel aracını belirtir.
+ Çıktıyı yerleştiren özel aracın ad alanını belirtir.
+
+
+ Dosyanın tam yolu.
+
+
+ Mantıksal Ad
+
+
+ Gömülü kaynak adı. Eğer boş bırakılırsa, kendiliğinden ad oluşturulur.
- Diğer Adlar
+ Takma Adlar
+
+
+ Bir virgülle ayrılmış takma ad listesi. Eğer gerekiyorsa referans derleme ile çakışan sınıf ve ad alanı isimlerinde takma adlar kullanın, örneğin aynı derlemenin farklı sürümleri.
Kültür
- Bu referans tarafından desteklenen kültür
+ Referans tarafından desteklenen kültür
+
+
+ Gömülü birlikte çalışma türleri
+
+
+ Referans derlemede tanımlı COM çalışma türlerinin hedef derlemede gömülü olup olmadığını belirtir.
Yerel kopya
- Eğer true ise referans edilen tümleşke çıktı dizinine kopyalanır
+ Eğer doğru(true) ise; referans derleme, çıktı yoluna kopyalanır
(İsim)
@@ -3156,16 +4031,22 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Referansın adı
- Ortak Anahtar Simgesi
+ Ortak Anahtar İşareti
- Açık anahtar
+ Ortak anahtar işareti
+
+
+ Referans derleme
+
+
+ Yanlış(False) olarak ayarlanırsa, Bu referans yalnızca bir derleme bağımlılık isteği belirtir ve referans derleme yapılmaz.
- Duruma özel uyarlama
+ Özel Sürüm
- Referansın, tümleşkenin belirli bir sürümüne bağlı olup-olmadığını gösterir.
+ Bu referansın, derlemenin özel bir sürümüne bağlı olup olmadığını gösterir.
URL Davranışı
@@ -3177,16 +4058,16 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Sürüm
- Projenin büyük, küçük, yeniden gözden geçirme ve inşâ numaları
+ Referansın büyük, küçük, yeniden gözden geçirme ve derleme numaraları
Web Referans URL si
- Web refarns URL 'si
+ Web referans URL 'si
- ${combineLocation} dosyası zaten var, var olanın üstüne yazılsın mı?
+ ${combineLocation} çözüm dosyası zaten var, üstüne yazmak istiyor musunuz?
'${type}' türünde bir proje oluşturulamıyor.
@@ -3197,17 +4078,35 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
${projectLocation} proje dosyası zaten var, var olanın üstüne yazılsın mı?
+
+ ${fileNames} dosya(lar) zaten var, üzerine yazmak istiyor musunuz?
+
- Dosya zaten var
+ Dosya(lar) zaten var
- Yüklüyor ${Filename}...
+ ${Filename} yükleniyor...
+
+
+ Çözümü kapat
Eski çözümü açık tut
- Çözümü yenile
+ Çözümü yeniden yükle
+
+
+ Bu çözüm dışarıdan değiştirildi.
+
+
+ Seçilen projeleri dönüştür:
+
+
+ Seçilen çalışma çerçevesini değiştir:
+
+
+ Seçilen projenin sürümünü değiştir
Derleyici Sürümü
@@ -3219,11 +4118,23 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
<değiştirmeyin>
- Hedef Çatı
+ Hedef Çalışmaçerçevesi
Proje Yükseltmesi
+
+ '${ProjectName}' projesi MSBuild ${OldToolsVersion} hedefliyor, fakat bu sürüm yüklü değil.
+Bu projenin MSBuild ${NewToolsVersion} sürümüne yükseltilmesini istiyor musunuz?
+Proje yükseltme olmadan açılamaz.
+
+
+ MSBuild ${NewToolsVersion} sürümüne yükselt
+
+
+ Bu çözüm SharpDevelop önceki bir sürümü kullanılarak oluşturulmuş.
+Eğer yükseltmek isterseniz, yeni bir dil veya yeni çalışmaçerçevesi özelliklerini kullanabilirsiniz.
+
Şu anki ortam bulunamadı.
'Seçenekler->Görsel Biçim' e gidin ve şu anki dil ortamını değiştirin.
@@ -3232,7 +4143,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Olanların hepsini işaretle
- Olanların hepsini değiştir.
+ ${Count} değişimlerini yap.
Tüm Testler
@@ -3240,14 +4151,29 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Kod Kapsama
+
+ XML çıktı dosyası oluştur
+
+
+ Herbir testi etiketle
+
+
+ Gölge kopya
+
Logoyu göster
- İlerleme durmunu göster
+ İlerleme durumunu göster
+
+
+ Ayrı bir konu üzerinde testler çalıştır
+
+
+ Kod kapsama ile tüm testleri çalıştır
- Birimi test tepsisinde çalıştır
+ Birimi test ortamında çalıştır
Şu anki projedeki testleri çalıştır
@@ -3258,11 +4184,62 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Hata ayıklayıcı ile çalıştır
+
+ ${Name} test ediliyor...
+
+
+ Test
+
+
+ Ünite testleri çalıştırılamıyor.'{0}' dosyası bulunamıyor.
+
+
+ Web
+
+
+ Uygulama zaten var.
+
+
+ Uygulama / sanal dizin oluştur
+
+
+ Web sunucu seçeneklerini etkisizleştir
+
+
+ Yerel IIS veya IIS Express bulunamadı.
+
+
+ ASP.NET/IIS(Express) ({0}) çalışan işlemi bulunamadı.
+
+
+ Belirtilen harici program veya URL yok. Web sunucusunda Web sekmesi - Proje Özelliklerini kontrol edin.
+
+
+ Sunucu portu:
+
+
+ Proje Url:
+
+
+ Web Sunucusu
+
+
+ Hata ayıklayıcı işleme ekleme yapamadı.
+
+
+ IIS Express Web sunucusunu kullan
+
+
+ Yerel IIS Web sunucusunu kullan
+
+
+ Uygulama/sanal dizin oluşturuldu.
+
- Uzantı Ekle
+ Uzantıları Ekle
- WiX Uzantıları Dosyaları
+ WiX Uzantı Dosyaları
WiX Kütüphane Dosyaları
@@ -3276,32 +4253,45 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Uzantılar
+
+ Kültürler:
+
- ICE'leri bastır
+ ICE'leri dışla:
Uyarılara hata muamelesi yap:
- WiX MSBuild uzantı yolu
+ WiX MSBuild uzantıları yolu:
- WiX hedefleri konumu:
+ WiX hedefleri yolu:
- WiX görevleri konumu:
+ WiX görevleri yolu:
- WiX konumu:
+ WiX araç yolu:
+
+
+ WiX Değişkenler:
Belgede, '{0}' numaralı diyalog bulunamadı.
+
+ Eklenti, şu formda olmalıdır:Sınıf,Çevirme
+
+Örneğin:
+
+Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension
+
Kütüphane
- Bağlama
+ Bağlantılama
Ad
@@ -3318,6 +4308,9 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Kur dosyaları bulunamadı. WiX dosyaları hata içeriyor.
+
+ Herhangi bir TARGETDIR dizini veya DirectoryRef öğesi bulunamıyor. Mevcut değil veya WiX belgesi WiX 3.0 için değildir veya alanadı "http://schemas.microsoft.com/wix/2006/wi" değildir.
+
'{0}' projesinde hiçbir WiX(.wxs) dosyası bulunamadı.
@@ -3334,7 +4327,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Önişleme
- WiX Uzantısı Ekle
+ WiX uzantısı Ekle
WiX Kütüphanesi Ekle
@@ -3342,14 +4335,17 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Yükleme Paketi
+
+ Modül Birleştirme
+
WiX Kütüphanesi
- Diyalogları Ayarla
+ İletişim Kutularını Ayarla
- '{0}' içinde '{1}' bulunamadı
+ '{1}' içinde '{0}' bulunamadı
Ekle...
@@ -3361,16 +4357,16 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Gerekli olan '{0}' özelliği kayıp.
- Wix belgesinde hiçbir kurulum diyaloğu yok. Lütfen imleçi diyalog elemanının içine hareket ettirin yada bir diyalog açmak için Kurulum Diyalogları penceresini kullanın.
+ Wix belgesinde kurulu bir iletişim kutusu yok. Lütfen imleci bir İletişim Kutusu elemanına hareket ettirin yada İletişim Kutularını Ayarla penceresini kullanın.
Yönetici Araçları
- Uygulama Verileri
+ Uygulama Verisi
- Uygulama Ortak Verisi
+ Ortak Uygulama Verisi
Ortak Dosyalar 64
@@ -3388,7 +4384,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Yazı tipleri
- Yerel Uygulama Verileri
+ Yerel Uygulama Verisi
Resimlerim
@@ -3403,13 +4399,13 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Program Dosyaları
- Program menüsü
+ Program Menüsü
Gönder
- Başlangıç Menüsü
+ Başlat Menüsü
Başlangıç
@@ -3445,7 +4441,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
WiX Yerelleştirme Dosyaları
- .NET Çatı Uzantısı
+ .NET Framework Uzantısı
Fark bulunamadı
@@ -3460,19 +4456,49 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
COM+ ve Mesaj Kuyruğu Uzantısı(pubca)
- WiX Hedef Dosyası
+ WiX Hedefler Dosyası
- WiX Görev Dosyası
+ WiX Görevler Dosyası
Visual Studio Uzantısı
+
+ Kopyala
+
+
+ Kes
+
+
+ Düzeylendir
+
+
+ Yapıştır
+
+
+ Özellikler
+
+
+ Tekrarla
+
+
+ Kaldır
+
+
+ Araçlar
+
+
+ Geri al
+
+
+ XAML görünümü
+
Özel:
- Özellik ekle
+ Nitelik Ekle
Özel:
@@ -3481,7 +4507,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Eleman Ekle
- XSLT &Belirle
+ XSLT Belirle
XSLT Stil Sayfası Belirle
@@ -3493,13 +4519,13 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
XPath Sonuçlarını Gizle
- XSLT &Aç
+ XSLT Aç
- XSL&T Çalıştır
+ XSLT Çalıştır
- XML Şemasını Seçin
+ XML Şeması Seç
XML 'yi Doğrula
@@ -3514,7 +4540,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Şema notlarını göster
- XML Ayarları
+ XML Seçenekleri
XML Tamamlama
@@ -3535,10 +4561,10 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Şemalar
- Şema eklenemiyor. '{0}' isimboşluğu zaten var.
+ Şema eklenemiyor. '{0}' ad alanı zaten var.
- '{0}' şemasının hedef isimboşluğu yok.
+ '{0}' şemasının bir hedef ad alanı yok.
XML Şemaları
@@ -3549,11 +4575,29 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Değişiklikler kayıt edilemiyor.
+
+ Nitelik Ekle...
+
+
+ Yavru Açıklama Ekle
+
+
+ Yavru Eleman Ekle...
+
+
+ Yavru Metin Düğümü Ekle
+
+
+ Açıklamadan Sonra Ekle
+
+
+ Açıklamadan Önce Ekle
+
- -Dan Sonra Eleman Ekle...
+ -dan Sonra Eleman Ekle...
- -Dan Önce Eleman Ekle...
+ -dan Önce Eleman Ekle...
Metin Düğümünü Sonrasına Yerleştir
@@ -3568,16 +4612,16 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
XML Ağacı
- İsim boşluğu
+ Ad alanı
- İsim boşlukları
+ Ad alanları
- XPath sorgu sonucu 0 nesne bulundu.
+ XPath sorgusunda 0 öğe bulundu.
- Ön Ek
+ Önek
Sorgulama
@@ -3597,35 +4641,59 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
XSLT Çıktısı
+
+ ILSpy belirtilen konumda bulamadı ya da SharpDevelop'un erişim için yeterli hakları yok.
+
+
+ ILSpy yolu henüz belirtilmedi.
+
+
+ ILSpy aç
+
+
+ Bu özellik, ILSpy gerektirir. Henüz kurulu değilse, ücretsiz olarak indirebilirsiniz:
+
+
+ ILSpy.exe tam yolu:
+
+
+ ILSpy yolunu ayarla
+
- Dış araçlar kurulumu yüklemeniyor.
+ Dış araçlar yapılandırma dosyası yüklenemiyor.
- Şablon kurulum dosyası yüklenemiyor
+ Şablon yapılandırma dosyası yüklenemiyor
Proje şablonu yüklenirken hata oluştu
+
+ SharpDevelop kapatılmadan önce derleme bitirilmelidir.
+
+
+ Derleme iptal edildi.
+
- İnşâ Başarısız.
+ Derleme başarısız.
- İnşâ başarı ile tamamlandı.
+ Derleme başarılı oldu.
- İnşâ başladı.
+ Derleme başladı.
- ------ İnşâ başladı: Proje: ${Project} Konfigurasyon: ${Config} ------
+ ------ Derleme başladı: Proje: ${Project} Yapılandırma: ${Config} ------
- İnşâ Ediliyor
+ Derleniyor
Derleniyor
- COM birlikte-işerlik tümleşkesi inşâ ediliyor...
+ COM birlikte çalışma çevrimi derleniyor...
Çalıştır: ${Script}
@@ -3637,7 +4705,10 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Ana derleme yapılıyor...
- İnşâ tamamlandı -- ${Errors} hata, ${Warnings} uyarı
+ Derleme tamamlandı -- hata ${Errors}, uyarı ${Warnings}
+
+
+ ${Name} atlandı (SharpDevelop içinde değişiklik yapılmadı)
SharpDevelop
@@ -3645,6 +4716,18 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Değişiklikleri iptal etmek istediğinizden emin misiniz?
+
+ Yerel değişken
+
+
+ ad alanı
+
+
+ parametre
+
+
+ Aşırı yükleme
+
Geçerli değişiklikleri kaydetmek istiyor musunuz?
@@ -3657,17 +4740,26 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Hazır
+
+ Tampon belleklerdeki tüm sık kullanılanları sil.
+
Sık Kullanılanı Sil
- Tümünü etkin/pasif kıl
+ Tümü etkin/etkisiz
- Bir sonraki sık kullanılana git
+ Sonraki sık kullanılana git
- Bir önceki sık kullanılana git
+ Önceki sık kullanılana git
+
+
+ {0} @line {1}
+
+
+ Konum
Sık Kullanılanlar
@@ -3676,13 +4768,13 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Geri
- Temel tipler
+ Temel türler
Diğer Üyeleri Göster
- Gizli Üyeleri Göster
+ Private Üyeleri Göster
Proje Referanslarını Göster
@@ -3691,10 +4783,10 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Protected Üyeleri Göster
- Genel Üyeleri Göster
+ Public Üyeleri Göster
- Sınıf Görünümü Seçenekleri
+ Sınıf Görünüm Ayarları
Aramayı Temizle
@@ -3703,13 +4795,13 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Ara
- Türemiş tipler
+ Türemiş türler
İlet
- Hiçbir sonuç bulunamadı.
+ Arama sonucu olumsuz.
Sınıf Görünümü Arama
@@ -3718,13 +4810,13 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Sınıflar
- Tümüzü Temizle
+ Tümünü Temizle
- Çıktıyı göster:
+ Çıktısını göster:
- Metni Kaydir/ma
+ Sözcük Kaydırmaya Geç
DuraksamaNoktaları
@@ -3738,8 +4830,11 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Semboller olmadan bir işleve geçemezsiniz.
+
+ Hata ayıklama sembolleri olmadan bir işlevi değiştiremezsiniz. Ya semboller ile yeniden derleyin yada "Sembolsüz Tekrar Derle" seçeneğini etkinleştirin.
+
- [Dış İşlevler]
+ [Dış Yöntemler]
Fonksiyon değiştir
@@ -3747,6 +4842,9 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Dil
+
+ Modül
+
Argüman adlarını göster
@@ -3754,19 +4852,94 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Argüman değerlerini göster
- Dış işlevleri göster
+ Dış yöntemleri göster
+
+
+ Satır numarasını göster
+
+
+ Modül adlarını göster
+
+
+ Sor
+
+
+ Kesme
+
+
+ Kesme noktası
+
+
+ Kesme noktası vurgusu!
+
+
+ Kesme noktası vurgusu satır {1} de {0} .
+
+
+ Kesme noktası vurgusu satır {1}de {0} çünkü {2}
+
+
+ Koşullu
+
+
+ Koşul
+
+
+ Devam
+
+
+ Kesme noktası etkisiz
+
+
+ Kesme noktasını etkin
+
+
+ Sözdizimini kontrol et
+
+
+ Betik dili
+
+
+ Hata Ayıklayıcı Betiği Düzenle
+
+
+ Sınırla
+
+
+ İz
+
+
+ Konsol
+
+
+ Kesme
Devam
- Hatanın önü kesilemedi. Hatası ayıklanan program daha fazla devam edemez.
+ İstisnaya müdahale edilemedi. Hata ayıklaması yapılan program daha fazla devam edemez.
+
+
+ Yakalanan istisnaya müdahale edilemedi. Hata ayıklama sembolleri istisna kaynağı için mevcut olmayabilir.
+
+
+ İstisna Detaylarını Gizle
+
+
+ --- İç istisna yığını izlemesi sonu ---
+
+
+ {0}da
- {0} üzerinde {1} içinde : satır {2}
+ {1} içinde {0} üzerinde:satır {2}
- {0} istisnası hata ayıklama için atıldı:
+ {0} türü bir hata:
+
+
+ İstisna Detaylarını Göster
Durdur
@@ -3774,15 +4947,24 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
İstisna
+
+ Yakalanan istisna
+
+
+ Bilinmeyen istisna
+
- Hata Geçmişi
+ İstisna geçmişi
- Hata
+ İstisna
Zaman
+
+ Göster/Gizle Yakınlaştırma Kontrolü
+
Yerel
@@ -3790,10 +4972,10 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Yerel değişkenler
- Taban nesne
+ Temel sınıf
- Hata ayıklayıcı çalışırken değişkenlere göz atamazsınız.
+ Hata ayıklayıcı çalışırken değişkenleri inceleyemezsiniz.
{0} dan {1} e çevrilemez
@@ -3807,20 +4989,68 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Değeri panoya yapıştır
+
+ Ad
+
+
+ Public üyeler dışında
+
+
+ Public Static üyeler dışında
+
- Gizli üyeler
+ Private üyeler
- Gizli Durağan Üyeler
+ Private Static Üyeler
Hatanın tümünü göster...
- Değerleri onaltılık düzende göster
+ Değerleri onaltılık göster
- Durağan üyeler
+ Static üyeler
+
+
+ Tür
+
+
+ Değer
+
+
+ Hafıza
+
+
+ {0} adresi bulunamadı!
+
+
+ Ekran bayt boyutu:
+
+
+ Adrese atla:
+
+
+ Diğer sanal adresler
+
+
+ Bellek adresleri eşleştirilemedi!
+
+
+ Hata ayıklanamıyor veya işlem yürütülemiyor!
+
+
+ Önceki sanal adresler
+
+
+ {0} dan {1} e okunuyor - boyut {2}.
+
+
+ Mevcut adresleri yinele
+
+
+ {1} boyutlu {0} adresi okunamıyor.
Yüklü modüller
@@ -3828,30 +5058,51 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Adres
+
+ (dinamik)
+
- Bir Sembol Yüklenmedi.
+ Semboller yüklenmedi.
Semboller yüklendi.
+
+ (hafızada)
+
Sıra
- Proğram
+ Program
Semboller
- Zaman Damgası
+ Zaman Ekleme
Sürüm
+
+ Nesne Grafiği
+
+
+ Paralel Yığınlar
+
+
+ İmleç çalıştır
+
Geçerli ifadeyi ayarla
+
+ Hata ayıklamayı durdurmak istiyor musunuz?
+
+
+ İşlemden ayırsın veya sonlandırsın mı?
+
Yürütme birimleri
@@ -3861,9 +5112,15 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Bir sonraki adıma geçemezsiniz çünkü; bir aktif işlev seçilmemiş
+
+ Mevcut hiçbir çerçeve ile bir iş parçacığını değiştiremezsiniz.
+
Hata ayıklayıcı çalışırken iş parçacıklarını değiştiremezsiniz.
+
+ Yararlanılabilir derlenmiş kod seçenekleri olmadan, derlenmiş kod parçacığını değiştiremezsiniz.
+
Dondur
@@ -3891,6 +5148,30 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
İş parçacığı değiştirme
+
+ Geçiş Yöntemini Göster
+
+
+ İzleme
+
+
+ İzleme Ekle
+
+
+ Izleme için bir tanım girin:
+
+
+ Geçersiz tanım: {0}
+
+
+ Yenile
+
+
+ Hepsini kaldır
+
+
+ İzlemeyi kaldır
+
Tanım Görünümü
@@ -3898,7 +5179,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Hatalar
- ${TaskService.Errors} Hata
+ ${TaskService.Errors} Hataları
Hataların listede gösterilip-gösterilmeyeceğini seçin
@@ -3910,7 +5191,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Mesajların listede gösterilip-gösterilmeyeceğini seçin
- ${TaskService.Warnings} Uyarı
+ ${TaskService.Warnings} Uyarıları
Uyarıların listede gösterilip-gösterilmeyeceğini seçin.
@@ -3945,11 +5226,17 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Yardım
+
+ Taslak
+
+
+ Bu belge için kullanılabilir bir taslak içeriği yoktur.
+
Çıktı
- İnşâ
+ Derle
Hata Ayıkla
@@ -3973,7 +5260,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Tümünü genişlet
- ${Count} dosya
+ ${Count} dosyalar
Düz
@@ -3997,7 +5284,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Dosya başına
- Arama listesi durumunu seç
+ Liste modu aramayı seç
Son aramaları göster
@@ -4012,49 +5299,49 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Araçlar
- Şu ankini çökert
+ Mevcudu daralt
- Şu ankini aç
+ Mevcudu genişlet
Sonuçları temizle
- Bütün hataları göster
+ Tüm hataları genişlet
- Yoksayılanları uzat
+ Tüm yoksayılanları genişlet
- Şu anki başarısızlıkları uzat
+ Mevcut hataları genişlet
- Şu an yoksayılanları göster
+ Mevcut yoksayılanı genişlet
Ağaç
- Doğrulama: hatalı
+ Doğrulama: başarısız
------ XML Doğrulanıyor ------
- Onaylama: başarılı
+ Doğrulama: başarılı
- Test tümleşkelerini kaldırır, otomatik yüklemeyi iptal eder.
+ Test derlemeleri yüklenemiyor, kendiliğinden yükleme iptal edildi.
Tanimlamaya &git
- Şu anki seçili projedeki NUnit 'e referans ekle
+ Mevcut seçili projedeki NUnit 'e referans ekle
- Test tümleşkelerini yeniden yükler
+ Test derlemelerini yeniden yükler
Bütün testleri çalıştır
@@ -4069,41 +5356,71 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Testleri durdur
- Test etmeyi etkinleştirmek için testleri çalıştır yada yenile 'ye tıklayın
+ Testleri çalıştıra tıkla yada Testi çalıştırmak için yenile
Yükleme hatası
- '${TestCase}' testi başarısız, çünkü: '${Message}'.
+ Test durumu '${TestCase}' başarısız.
- '${TestCase}' testi çalıştırılmadı.
+ Test durumu '${TestCase}' yürütülemedi.
- Tümleşke Yükle...
+ Derleme Yükle...
- Referans Edilmiş Tümleşkeleri Yükle
+ Referanslı Derlemeleri Yükle
- Standart Tümleşkeleri Yükle
+ Standart Derlemeleri Yükle
- &Kapat
+ Kapat
Bu hariç hepsini kapat
- K&aydet
+ Kaydet
- Farklı Ka&ydet...
+ Farklı Kaydet...
Dosya yolunu/adını kopyala
+
+ Explorer'da klasör içeriğini aç
+
+
+ Burada komut istemi aç
+
+
+ hedef çalışmaçerçevesini seçin
+
+
+ Taşınabilir Sınıf Kitaplığı Araçları bulunamadı.
+
+
+ .NET Taşınabilir AltSeti
+
+
+ İki veya daha fazla çerçevenin seçilmesi gerekir.
+
+
+ Seçili profil:
+
+
+ Taşınabilir Kitaplık Profili seç
+
+
+ Visual Studio yüklemeden Taşınabilir Sınıf Kitaplığı Araçları'nı yüklemek için,bilgisayarınıza dosyayı(PortableLibraryTools.exe)indirip kaydedin ve bir komut istemi penceresinde kurulum programını çalıştırın.Komut satırında /buildmachine anahtarı ekleyin.
+
+
+ Bütün düğümleri daralt
+
Var olan dosyaları ekle
@@ -4135,11 +5452,14 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Web Referansı Ekle
- İnşâ et
+ Derle
Temizle
+
+ Tümünü daralt
+
'${FileName}' dosyasını tamamen sil?
@@ -4152,38 +5472,56 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Projeden Dışla
+
+ Özel araçları çalıştır
+
+
+ Varolan klasör...
+
+
+ Hedef dizine klasörü kopyalamak istiyor musunuz?
+
- Var olan Öğe...
+ Varolan Öğe...
+
+
+ Öğe, Bağımlı Öğe Olarak Mevcut ...
- Var olan Proje...
+ Varolan Proje...
- NDoc ile belgelendirme inşâ et
+ XML açıklamalarından belgelendirme derle
- Projenin inşa ayarlarını xml döküman dosyası üret şeklinde değiştirmelisiniz.
+ Projenin derleme ayarlarını, bir xml belgeleme dosyası üret şeklinde değiştirmelisiniz.
Projeyi derlemelisiniz
- xml döküman dosyayı yok, projeyi tekrar derlemelisiniz.
+ xml döküman dosyası yok, projeyi derlemelisiniz.
+
+
+ XML açıklama belgeleri oluşturabilmek için 'Sandcastle Yardım Dosyası Derleyicisi'nin kurulu olması gerekir.
- Html İhraç
+ Html Dışa Aktar
Projeye dahil et
- Derleme
+ Derle
Yerleştir
+
+ Yeni Bağımlı Öğe ...
+
- Y&eni Dizin
+ Yeni Klasör
Yeni Öğe...
@@ -4192,16 +5530,22 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Yeni Proje
- Yeni Çözüm Dizini
+ Yeni Çözüm Klasörü
+
+
+ Bu proje bir web projesi değil.
- &Aç
+ Aç
+
+
+ Çıktı Klasörü Aç
- Yeniden inşâ et
+ Yeniden derle
- Web Referansını Tazele
+ Web Referansını Yenile
Yeniden Adla&ndır
@@ -4209,11 +5553,17 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Projeyi Çalıştır
+
+ Projeyi Hata Ayıklamadan Çalıştır
+
Başlangıç Projesi olarak Ata
+
+ Tarayıcıda görüntüle
+
- Yeni Dizin
+ Yeni Klasör
{0} projesinden tüm web referanslarını silmek istiyor musunuz?
@@ -4222,19 +5572,19 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Tüm web referanslarını sil
- Bileşkeler (*.dll)|*.dll
+ Derlemeler (*.dll)|*.dll
- Tümleşke
+ Derleme
Sınıf adı
- Derleme
+ Derle
- Tümleşke oluştur
+ Derleme oluştur
ECMA betiği
@@ -4243,7 +5593,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Son
- Açıkca yakala
+ Açık yakala
Gruplar
@@ -4264,10 +5614,10 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Çok satırlı
- İsim boşluğu
+ Ad alanı
- Açıkca gözükür
+ Açıkça görünür
Düzenli ifade
@@ -4276,7 +5626,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Değiştir
- Değiştirme metni
+ String değiştirme
Sonucu değiştir
@@ -4306,10 +5656,10 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Regex derlenemedi, çünkü:
- Regex oluşturma hatası oluştu, çünkü:
+ Regex oluşturma hatası, çünkü:
- Dosya başarılı bir biçimde olşturuldu:
+ Dosya başarılı bir biçimde oluşturuldu:
Lütfen geçerli bir dosya adı girin
@@ -4318,28 +5668,28 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Lütfen bir dosya adı girin
- Eşle
+ eşle
eşleşenler
- Lütfen bir düzenli ifade girin
+ Lütfen düzenli bir ifade girin
- Rakam
+ Sayısal karakter
- Sayı olmayan karakter
+ Sayısal olmayan karakter
Boşluk olmayan karakter
- Kelime benzeri harf değerleri
+ Sözcük olmayan karakter değeri
- Karnı-tok joker
+ Dolu yıldız
Boşluk karakteri
@@ -4362,38 +5712,44 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Kaynak yüklenemiyor
+
+ Hata: Kaynak kodu üreteci "{0}" kaynak dosyasını atladı, çünkü oluşturulan sınıf mevcut sınıf "{1}" ile çakışıyor.
+
+
+ Kaynak kod üreteci: '{0}' kaynağı için hiçbir kaynak özelliği oluşturamıyor.
+
İçerik
- Dosyaları &ekle...
+ Dosyaları ekle...
- Metin girişi ekle
+ String girişi ekle
Kaynak adı kopyala
- &Yeniden adlandır
+ Yeniden adlandır
- Hex Kodu Göster
+ Onaltılı Yığın Olarak Göster
Tür
- Bu anahtar daha önceden tanımlandı! Lütfen başka birini seçin.
+ Bu anahtar daha önceden tanımlandı! Lütfen başka bir tane seçin.
Tüm dosyalar (*.*)
- Tümleşke dosyaları (*.exe, *.dll)
+ Çevirme dosyaları (*.exe, *.dll)
- Binary(ikili) dosyalar
+ İkili dosyalar
Boo Dosyaları
@@ -4411,13 +5767,13 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
C# Dosyaları (*.cs)
- CSharp Proje Dosyaları
+ C# Proje Dosyaları
İmleç dosyaları
- Çalıştırılabilir Dosyalar(*.exe;*.com;*.pif;*.bat;*.cmd)
+ Çalıştırılabilir Dosyalar (*.exe;*.com;*.pif;*.bat;*.cmd)
Simge Dosyaları (*.ico)
@@ -4432,10 +5788,10 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Resim dosyaları
- Anahtar dosyalar
+ Anahtar dosyaları
- NAnt İnşâ Dosyaları
+ NAnt Derleme Dosyaları
SharpDevelop 1.1 Proje Dosyaları (*.prjx)
@@ -4453,7 +5809,7 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Visual Basic Proje Dosyaları
- Xml Dosyaları (*.xml)
+ XML Dosyaları (*.xml)
XML Şema Dosyaları (*.xsd)
@@ -4470,41 +5826,65 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Adımlar
+
+ Akış eklendi!
+
+
+ ${Name} Temel sınıfları
+
Bu işlem yerine getirilemez çünkü kaynak kodlarınızda hata var:
- Eleman kullanıcı kodunda tanımlanmadığı için adlandırılamıyor.
+ Eleman kullanıcı kodunda tanımlanmadığı için adı değiştirilemiyor.
+
+
+ Düzeltme pozisyonunda eleman adı değiştirilemez.
${Name} 'den türeme sınıflar
+
+ Otomatik özelliği dönüştür
+
- Changed-event oluştur
+ Değişmiş olay oluştur
- Getirici oluştur
+ Alıcı oluştur
- OnEvent-işlevi oluştur
+ Olay üzerinde yöntemi oluştur
Özellik oluştur
- Şu anki işlev
+ Mevcut yöntem
Tanımlama türü
+
+ Otomatik özelliği genişlet
+
+
+ Arayüzü Çıkar
+
+
+ Temel sınıfları bul
+
Türetilmiş sınıfları bul
+
+ Türetilmiş semboller bul
+
Referanslar bulunuyor...
- Aşırı yüklemeleri bul
+ Geçersiz kılmaları bul
Referansları bul
@@ -4513,37 +5893,46 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Referansları bul
- Taban sınıfa git
+ Temel sınıfa git
- Tabana git
+ Temele git
Özelliğe git
+
+ Soyut sınıf gerçekleştir
+
- Arayüz gerçekle
+ Arayüz gerçekleştir
Arayüz gerçekle(açıktan)
- Arayüz gerçekle (örtük)
+ Arayüz gerçekleştir (örtük)
- İsimler ssadece harf,rakam yada alttan tire içerebilir.
+ İsimler sadece harf,rakam yada alt tire içerebilir.
İsimler bir harf veya alt çizgi ile başlamalıdır.
- Bütün sayfalar parçalanana değin Bul referansları çalıştırılamaz.
+ Bütün dosyalar çözümlene kadar Bul referansları çalıştırılamaz.
Sınıfı '${FileName}' dosyasına taşı
+
+ ${Name} geçersiz kıl
+
+
+ ${Name} referansları
+
- Kullanılmayan import komutlarını kaldır
+ Kullanılmayan dahil edilmiş ifadeleri kaldır
Yeniden adlandır
@@ -4552,13 +5941,13 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Sınıfın yeni adını girin:
- &Yeniden adlandır
+ Yeniden adlandır
SharpDevelop {0} özelliğini {1} olarak yeniden adlandırsın mı?
- Dosya adını '${FileName}' olarak değiştir
+ Dosyayı '${FileName}' olarak değiştir
Üyenin yeni adını girin
@@ -4578,32 +5967,48 @@ Sadece harf,rakam, boşluk, '.' yada '_' kullanabilirsiniz.
Lisanslar
+
+ Geçerli belge için herhangi bir araç yok.
+
XSL-T
- Bilinen bütün proje formatları
+ Bilinen tüm proje formatları
+
+
+ Bu SharpDevelop sürümü, Visual Studio .NET 2003 (veya öncesi) kullanılarak oluşturulan projeleri yükleyemiyor.
+Dönüşüm için SharpDevelop 3.2 sürümünü kullanmayı deneyin veya varolan kaynak kodu yeni bir proje dosyasına ekleyin.
+
+
+ {0} kaydedilemiyor:\n{1}
+
+
+ {0} çözüm dosyası kaydedilemiyor. Salt okunur olarak işaretlenmiş.
+
+
+ {0} kaydedilemiyor:\n{1}\n\nDosyanın yazılabilir olduğundan emin olun.
- Projede kaynak dosyaları vardı.
-SharpDevelop 2 kaynakları farklı bir biçimde derler: kaynak adı sadece dosya adı değildir; başında kök isim boşluğu ve dizin adıda vardır.
+ Projede kaynak dosyaları var.
+SharpDevelop 2 kaynakları farklı bir biçimde derler: kaynak adı sadece dosya adı değildir; başında root alanadı ve dizin adıda vardır.
Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
- Takip eden dosyalar yeniden adlandırılamadı/taşınamadı:
+ Takip eden dosyalar kendiliğinden yeniden adlandırılamadı/taşınamadı:
'{0}' geçerli bir çözüm dosyası değil.
- Microsoft {0} Çözüm dosyası biçimini okuyamıyor.
+ Microsoft Çözüm dosyası biçimi {0} okunamıyor.
Veritabanı
- SharpDevelop Raporlama
+ SharpDevelop Raporları
Alanı Kes
@@ -4618,13 +6023,13 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Gruplama/Sıralama
- Yapıştır Alanı
+ Alanı Yapıştır
Önizlemeyi Göster
- Görünür Kesim
+ Görünür Kısım
Temel Ayarlar
@@ -4633,31 +6038,31 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Tasarım
- AyrıntıKısmı
+ Ayrıntı Kısmı
- SayfaSonu
+ Sayfa Sonu
- SayfaBaşlığı
+ Sayfa Başlığı
- RaporAltBilgi
+ Rapor AltBilgi
- RaporBaşlığı
+ Rapor Başlığı
Raporu yazıcıya yolla
- SharpDevelop Rapor Sistemini çalıştırabilmek için en az bir(1) çalışır yazıcıya ihtiyacınız var.
+ SharpDevelop Raporlarını yürütmek için en az bir kurulu yazıcı olmalı.
Bu rapor 'SharpReport' ile oluşturulmamış.
- Dosya okunamadı, dosya bozuk (SharpReportFile 'ın biçimi bozuk)
+ Dosya okunamadı, dosya bozuk (SharpRaporDosyası'nın biçimi bozuk)
Mevcut Alanlar
@@ -4666,7 +6071,7 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Düğüm kaldır
- Sıralamayı ters-düz et
+ Sıralamayı tersine çevir
Düğümleri Kaldır
@@ -4692,23 +6097,32 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Rapor Üretici
+
+ Rapor Gösterici
+
İlk Sayfa
Son Sayfa
+
+ Diğer
+
- Oluşturulan dosyalar
+ Oluşturulan sayfalar
Pdf Dosyası Oluştur
+
+ Önceki
+
Yakınlaştır
- Çember
+ Döngü
Raporlama - Kontroller
@@ -4717,7 +6131,7 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
VeriAlanı
- DataSatırı
+ VeriSatırı
Raporlama - Fonksiyonlar
@@ -4726,11 +6140,17 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
SayfaNo
- Sayfaların SayfaNumarası
+ Sayıların Sayfa Numarası
Bugün
+
+ Grup Altbilgisi
+
+
+ Grup Üstbilgisi
+
Resim
@@ -4743,23 +6163,26 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Dikdörtgen
+
+ Tablo
+
Etiket
- Taban ayarlar
+ Temel ayarlar
Rapor Türü
- Dosya adı
+ Dosya Adı
Grafik Birim
- Basit rapor ayarları
+ Temel rapor ayarları
Rapor Modeli
@@ -4768,25 +6191,43 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Form Sayfası
- Veri Çek
+ Veri Çekme
Verileri Bas
+
+ Rapor Adı
+
Rapor Türü
+
+ Grup Sütunu Seç
+
+
+ Gruplama
+
+
+ Liste Düzeni
+
+
+ Rapor Düzeni
+
+
+ Tablo Düzeni
+
- Veri Modelini Çek
+ Veri Modeli Çek
Komut Metni
- [Bu metni silip yerine geçerli bir SQL sorgusu girin]
+ [Bu metni silip yerine geçerli bir SQL String girin]
- İtme Veri Modeli
+ Veri Modeli Bas
Mevcut Alanlar
@@ -4798,31 +6239,31 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Sonuçları Kaydet (Şema ve Veriler)
- Sonuçları Kaydet(Şema(*.xsd) halinde)
+ Sonuçları Kaydet(Sadece şema)
Sorgu Sonucunu Göster
- Sekme &Ekle
+ Sekme Ekle
- Sekmeyi &Sil
+ Sekmeyi Sil
- "${TabHeader}" sekmesini gerçekten silmek istiyor musunuz(bu ayrıca sekmedeki bütün öğeleride silecektir)?
+ "${TabHeader}" sekmesini gerçekten silmek istiyor musunuz(ayrıca sekmedeki bütün öğelerde silinecektir)?
- Öğeyi &Sil
+ Öğeyi Sil
- "${TabItem}" yi gerçekten silmek istiyor musunuz?
+ "${TabItem}" öğesini gerçekten silmek istiyor musunuz?
- Sekmeyi &YenidenAdlandır
+ Sekmeyi Yeniden Adlandır
- Öğeyi &YenidenAdlandır
+ Öğeyi Yeniden Adlandır
Yazarları Göster
@@ -4831,13 +6272,13 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Yazarlar
- Değişiklikler Günlüğünü Göster
+ Günlüğü Göster
- DeğişimKaydı
+ Günlük
- Bizimle irtibat geçin
+ Bize Ulaşın
Yardım Aranıyor
@@ -4849,7 +6290,7 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Proje Seç
- Yer
+ Konum
Değiştirilmiş
@@ -4867,31 +6308,34 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Başlangıç Sayfası
- YER
+ INS
- ÜYZ
+ OVR
- sat ${Line} süt ${Column} ha ${Character}
+ satır ${Line} sütun ${Column} ${Character}
Çeşitli
- Kur
+ Kurulum
Windows Uygulamaları
- ConfigurationElement gerçeklemesi yapan sınıf.
+ Yapılandırma Elemanı Gerçekleştirme Sınıfı.
+
+
+ Yapılandırma Elemanı
- ConfigurationElementCollection 'den türeme sınıf.
+ Yapılandırma Eleman Koleksiyonundan türeme sınıf.
- Nesne Yığını Ayarları
+ Yapılandırma Elemanı Koleksiyonu
ConfigurationSection gerçeklemesi yapan sınıf
@@ -4911,8 +6355,14 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Boş Dosya
+
+ Yeni bir istisna Sınıf oluştur.
+
+
+ İstisna
+
- Bir Gtk# uygulaması için bir pencere
+ Bir Gtk# uygulaması için pencere
Gtk# Penceresi
@@ -4930,7 +6380,7 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Boş bir HTML dosyası oluşturur.
- Boş bir arayüz tanımlaması.
+ Boş bir arayüz tanımlama.
Arayüz
@@ -4942,22 +6392,22 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Modül
- "İnşâ" hedefi boş olan bir MSBuild dosyası oluşturur.
+ Boş bir "Derleme" hedefi ile bir MSBuild dosyası oluşturur.
MSBuild dosyası
- "Benim" isim boşluğunu uzatan sınıf için bir şablon.
+ "My" ad alanını uzatan sınıf için bir şablon.
- "Benim" uzantılarım
+ "My" uzantılar
- Yeni bir NAnt inşâ dosyası oluşturur.
+ Yeni bir NAnt derleme dosyası oluşturur.
- NAnt inşâ dosyası
+ NAnt derleme dosyası
'#if TEST ... #endif' ekle
@@ -4972,10 +6422,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Eğer doğru ise, kur kodu üretilecek.
- Yok etme kodu ekle
+ Yıkma kodu ekle
- Eğer doğru ise, yok etme kodu üretilecek.
+ Eğer doğru ise, yıkma kodu üretilecek.
İçerik
@@ -4983,6 +6433,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Seçenekler
+
+ Uygulamanız son açılan dosyaları depolamak için Yapılandırma Koleksiyonunu kullanır.
+
Son açılan dosyalar
@@ -4990,10 +6443,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
boş bir kaynak dosyası oluşturur
- Kaynak dosyayı boşalt
+ Boş kaynak dosyası
- Bu sınıf sürekli nesnelere kolay erişimi tanımlar.
+ Bu sınıf kalıcı özelliklere kolay erişimi tanımlar.
Eklenti Seçenekleri
@@ -5008,31 +6461,31 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Bir #D seçenek paneli.
- Ayar Paneli
+ Seçenek Paneli
- Çeşitli olaylar için kullanılabilecek bir komut.
+ Çeşitli durumlar için kullanılabilecek bir komut.
Basit Komut
- Bir #D tepsi içeriği (örneğin #D kaşifleri).
+ Bir #D ortam içeriği (örneğin #D gözcüleri).
- Boş Tepsi
+ Boş Ortam
- Bir #D görünüm içeriği ( örneğin metin düzenleyici yada kaynak düzenleyici).
+ Bir #D görünüm içeriği ( örneğin metin düzenleyici veya kaynak düzenleyici).
Boş Görünüm
- 'Tek sınıf' türü bir sınıf
+ Singleton deseni izleyen bir sınıf.
- Tek Sınıf
+ Singleton Sınıf
Equals() ve GetHashCode() gerçeklemelerini içeren bir yapı belirlemesi.
@@ -5040,8 +6493,14 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Yapı
+
+ Equals() and GetHashCode()içeren bir yapı bildirimi uygulanır.
+
+
+ Yapı
+
- Metin dosyasını boşalt
+ Boş metin dosyası
Yeni bir metin dosyası oluşturur.
@@ -5059,10 +6518,16 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
ASP.NET Web Kontrolü
- WEb Sayfası: arkasında kod ile .aspx sayfası
+ Web Form: arka kod ile .aspx sayfası
- ASP.NET Web Sayfası
+ ASP.NET Web Form
+
+
+ Arka kod ile ASP.NET Web İşleyici Oluştur.
+
+
+ ASP.NET Web İşleyici
ASMX Web Servisi için Bileşen Çatısı
@@ -5107,10 +6572,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
WPF Penceresi
- WiX için boş parça dosyası
+ WiX için boş bölüm dosyası
- Boş WiX Parça Dosyası
+ Boş WiX Bölüm Dosyası
Boş bir kurulum penceresi oluşturur.
@@ -5119,7 +6584,7 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Boş Kurulum Penceresi
- Üzerine bazı kontroller olan kurulum penceresi oluşturur.
+ Üzerinde bazı varsayılan kontroller olan kurulum penceresi oluşturur.
Kur Diyaloğu
@@ -5134,16 +6599,16 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Boş bir kurulum projesi oluşturur.
- Boş Kur Projesi
+ Boş Kurulum Projesi
- Uygulamanız için bir uyg.config dosyası oluşturur. Eğer bu proje çalıştırabilir ise MSBuild uygadı.exe.config olarak değiştirir.
+ Uygulamanız için bir uygulama.config dosyası oluşturulur. Eğer bu proje çalıştırabilir ise MSBuild uygulamaadı.exe.config olarak değiştirir.
- Uyg.Ayar Dosyası
+ Uyg.Config Dosyası
- XML dosyasını boşalt
+ Boş XML dosyası
Boş bir XML dosyası oluşturur.
@@ -5161,16 +6626,16 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
XML Kullanıcı Kontrolü
- Projeleri olmayan boş bir çözüm olşturur.
+ Projesiz boş bir çözüm oluşturur.
Boş çözüm
- Başka uygulamaların içinde kullanılabilen sınıflar oluşturan bir proje.
+ Başka uygulamalarda kullanılabilen sınıflar oluşturan bir proje.
- Sınıf Kütüphanesi
+ Sınıf Kitaplığı
Komut satırı uygulaması oluşturan proje.
@@ -5178,6 +6643,12 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Konsol Uygulaması
+
+ Yönetilmeyen(yerli) kodlu komut satırı uygulamasına sahip bir proje oluşturur.
+
+
+ Yönetilmeyen konsol projesi
+
Direct3D arayüzlü uygulama yapabilmek için bir proje.
@@ -5185,25 +6656,31 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Direct3D uygulaması
- Boş proje
+ Boş bir proje.
Boş Proje
- Glade# uygulaması oluşturan proje
+ Glade# uygulaması oluşturan bir proje
Glade# Uygulaması
- Gtk# uygulaması oluşturan proje.
+ Gtk# uygulaması oluşturan bir proje
Gtk# Uygulaması
+
+ Windows, Silverlight, Windows Phone ve Xbox kullanılabilir Kitaplığı.
+
+
+ Taşınabilir Sınıf Kitaplığı
+
- Windows Installer oluşturabilmek için bir proje
+ MSI Installer oluşturabilmek için bir Windows Installer projesi.
Kurulum Projesi
@@ -5226,6 +6703,12 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Araçlar menüsü girişi
+
+ Bir Silverlight uygulaması oluşturan bir proje.
+
+
+ Silverlight Uygulaması
+
Görev çubuğuna simge koyan bir uygulama oluşturan proje
@@ -5242,13 +6725,13 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
ASP.net web uygulaması
- ASP.NET Web sayfası projesi
+ ASP.net Web sayfası projesi
- ASP.NET Web Hizmeti oluşturan bir proje.
+ ASP.NET Web Servisi oluşturan bir proje.
- ASP.NET Web hizmeti
+ ASP.NET Web Servisi
Windows arayüzlü bir uygulama oluşturan proje.
@@ -5269,10 +6752,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
WPF Uygulaması
- Tek seyrüsefer sayfası olan basit bir WPF uygulaması oluşturur.
+ Tek gezinme sayfası olan basit bir WPF uygulaması oluşturur.
- WPF Seyrüsefer Uygulaması
+ WPF Gezinme Uygulaması
Rapor Sihirbazını kullanarak yeni rapor oluştur
@@ -5280,20 +6763,23 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Kenarçubuğu Yapılandır...
+
+ Analiz
+
- İnşâ
+ Derle
- İnşâyı İptal Et
+ Derlemeyi İptal Et
- İptal
+ Kesme
- ${CurrentProjectName} İnşa et
+ ${CurrentProjectName} Derle
- Çözümü İnşâ et
+ Çözümü Derle
${CurrentProjectName} Temizle
@@ -5302,19 +6788,19 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Çözümü Temizle
- Konfigürasyon/platform düzenle
+ Yapılandırmalar/platformlar düzenle
${CurrentProjectName} Yayınla
- Çözümü Yaınla
+ Çözümü Yayınla
- ${CurrentProjectName} Yeniden inşa et
+ ${CurrentProjectName} Yeniden derle
- Çözümü Yeniden İnşâ et
+ Çözümü Yeniden Derle
Yapılandırmayı ayarla
@@ -5326,10 +6812,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Hata Ayıkla
- İşleme Katıl...
+ İşleme Ekle...
- Duraksa
+ Duraksat
Hata ayıklama işlemini duraksat
@@ -5338,13 +6824,16 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Hata ayıklamaya devam et
- İşlemin yürütmesine devam eder.
+ İşlemin yürütülmesine devam edilir.
Bırak
- Programın .NET Framework sürüm numarası bulunamadı. Programın yönetilen bileşke olup-olmadığını kontrol edin.
+ Programın .NET Framework sürüm numarası bulunamadı. Programın yönetilen derleme olup olmadığını kontrol edin.
+
+
+ İşleme eklenemiyor.
İşlem başlatılamıyor.
@@ -5353,7 +6842,7 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Hata ayıklama işlemi sürdüğünden eylem gerçekleştirilemedi.
- Çekirdek hata ayıklayıcısı aktif olduğundan SharpDevelop hata ayıklayıcısı başlatılamaz. Çekirdek hata ayıklayıcısını kapatmak için Boot.ini dosyasındaki "/debug"i kaldırın ve bilgisayarı yeniden başlatın.
+ Çekirdek hata ayıklayıcısı aktif olduğundan SharpDevelop hata ayıklayıcısı başlatılamaz. Çekirdek hata ayıklayıcısını kapatmak için Boot.ini dosyasındaki "/debug" anahtarını kaldırın ve bilgisayarı yeniden başlatın.
.NET Framework 1.0 a ait uygulamaların hata ayıklama işlemleri için destek verilmiyor.
@@ -5362,28 +6851,34 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Hata ayıklama safhasına geçmediğiniz için bu özelliği kullanamazsınız.
- İşleme ara verdiğiniz için bu komutunuz yerine getirilemiyor.
+ İşleme ara verdiğiniz için bu eylem gerçekleştirilemiyor.
- İşlem yürütülüyor olduğu için bu komutunuz yerine getirilemiyor.
+ İşlem yürütüldüğü için bu eylem gerçekleştirilemiyor.
+
+
+ Bütün kesme noktalarını kaldır
+
+
+ Önceki derlemeyi çalıştır
- Hata ayıklayıcı olmadan çalıştır
+ Hata ayıklamadan çalıştır
Programı normal olarak çalıştırır.
- İçeri atla
+ İçeri gir
İçeri gir
- Dışa atla
+ Dışarı çık
- Dışına Çık
+ Dışarı çık
Üstünden Atla
@@ -5395,28 +6890,28 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
İşlemi durdur
- Şu anki süreci durdurur ve hata ayıklamayı sona erdirir.
+ Mevcut süreci durdurur ve hata ayıklamayı sona erdirir.
- Durma İşareti
+ Kesme noktası İşareti
- &Düzen
+ Düzen
- &Kopyala
+ Kopyala
- Seçili kısmı panoya kopyala
+ Seçimi panoya kopyala
- &Kes
+ Kes
- Seçili kısmı panoya taşı
+ Seçimi panoya taşı
- &Sil
+ Sil
Sil
@@ -5431,10 +6926,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Bütün katlamaları tersine çevir
- Katlamayı ters çevir
+ Katlamayı tersine çevir
- &Biçimlendir
+ Biçimlendir
Büyük harfe çevir
@@ -5452,10 +6947,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Küçük Harfe
- Öndeki boşlukları kaldır
+ Öndeki Boşlukları Kaldır
- İzleyen Boşlukları Kaldır
+ Takipeden Boşlukları Kaldır
Satırları Sırala...
@@ -5473,76 +6968,79 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Yerleştir
- &Yapıştır
+ Yapıştır
Yorum olarak kopyala
- Metin olarak kopyala
+ String olarak kopyala
Panodan metni yapıştır
- &Yinele
+ Yinele
Son geri alma işlemini yinele
- Tümünü &Seç
+ Tümünü Seç
- &Geri al
+ Geri al
Son işlemi geri al
- &Sözcük Sayısı…
+ Sözcük Sayısı…
- &Dosya
+ Dosya
- Son izlenen dosyalar listesini sil
+ Son dosyaların listesini sil
- Açılan projeler geçmişini sil
+ Son projeler listesini sil
- &Kapat
+ Kapat
- &Dosya
+ Dosya
- &Çözüm
+ Çözüm
- Tüm Belgeleri Ka&pat
+ Tüm Belgeleri Kapat
- Çı&k
+ Çık
- &Yeni
+ Yeni
- &Dosya...
+ Dosya...
Yeni tampon aç
+
+ Proje...
+
Çözüm...
- &Aç
+ Aç
- &Dosya
+ Dosya
Tamponu disk'den aç
@@ -5554,58 +7052,61 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Proje/Çözüm Aç
- &Yazdır
+ Yazdır
Baskı Önizleme
- En son &Dosyalar
+ En son Dosyalar
- En Son P&rojeler
+ En Son Projeler
- Dosyayı &tekrar yükle
+ Dosyayı tekrar yükle
- &Kaydet
+ Kaydet
- Şu anki tamponu kaydet
+ Mevcut tamponu kaydet
- Tümünü K&aydet
+ Tümünü Kaydet
- Şu anki açık bütün tamponları kaydet
+ Mevcut açık tüm tamponları kaydet
- Faklı Kaydet
+ Farklı Kaydet
+
+
+ Kodlama ile kaydet
- B&içim
+ Biçim
- &Hizala
+ Hizala
- Dipler
+ Alt kenarlar
- &Ortaya
+ Merkezler
- &Sola
+ Sol kenarlar
- Sağa daya
+ Sağ kenarlar
Izgaraya
- Yukarılar
+ Üst kenarlar
Ortalar
@@ -5614,10 +7115,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Formda ortala
- &Yatay
+ Yatay
- &Düşey
+ Düşey
Yatay Boşluk
@@ -5626,7 +7127,7 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Öne Al
- &Kaldır
+ Kaldır
Azalt
@@ -5662,19 +7163,19 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Her ikiside
- &Yükseklik
+ Yükseklik
- &Genişlik
+ Genişlik
- Izgaraya uydur
+ Izgara ölçüsü
Büyük simgeleri göster
- &Özellikler
+ Özellikler
Sekme sırasını göster
@@ -5695,10 +7196,10 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Eşitle
- &Yardım
+ Yardım
- &Hakkında...
+ Hakkında...
Yardım içeriği
@@ -5707,16 +7208,16 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Dinamik Yardım
- &GPL...
+ GPL...
- &BeniOku...
+ BeniOku...
Kodlama Tarzı Rehberi
- &Günün İpucu
+ Günün İpucu...
Yardım Konuları
@@ -5725,79 +7226,82 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Web
- Bir Öncekine Git
+ Geriye Git
- Seyrüsefer Geçmişini Temizle
+ Gezinti Geçmişini Temizle
- Bir Sonrakine Git
+ Sonrakine Git
- &Proje
+ Proje
Proje Seçenekleri
- Yeniden Düzenleme
+ Yeniden Düzenle
- Şu anki projei inşâ eder.
+ Mevcut projeyi derler.
+
+
+ Mevcut çözümdeki tüm projeleri derler.
- Etkin projeyi yada tamponu inşâ et(eğer bir proje açık değilse)(otomatik kayıt yapar)
+ Açık projeyi yada tamponu derle(eğer proje açık değilse)(kendiliğinden kayıt yapar)
- Projeyi inşâ edebilmek için hata ayıklayıcıyı durdurmanız gerekir. Hata ayıklamayı durdurmak istiyor musunuz?
+ Projeyi derleyebilmek için hata ayıklayıcıyı durdurmanız gerekir. Hata ayıklamayı durdurmak istiyor musunuz?
Hata Ayıklamayı Durdur
- &Çalıştır
+ Çalıştır
Derlenmiş exe 'yi çalıştır(yeniden derler)
- &Ara
+ Ara
- Bütün Yer İmlerini Temizle
+ Tüm Yer İmlerini Temizle
- Şu anki tampondaki bütün yer imlerini temizle
+ Mevcut tampondaki tüm yer imlerini temizler
- &Bul...
+ Bul...
- &Sonrakini Bul
+ Sonrakini Bul
- &Secili metnin sonraki eşini bul
+ Sonraki seçimi bul
- Satır Numarasına Git...
+ Git...
- Denkleşen Küme İşaretine Git
+ Eşleşen Paranteze Git
Artan Arama
- Bir sonraki yer imi
+ Sonraki yer imi
- Bir sonraki yer imine git
+ Sonraki yer imine git
- Bir Önceki Yer İmi
+ Önceki Yer İmi
- Bir önceki yer imine git
+ Önceki yer imine git
Değiştir...
@@ -5809,20 +7313,20 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Yer imlerini ters çevir
- Şu anki satıra yer imi koy/kaldır
+ Mevcut satıra yer imi koy/kaldır
- &Araçlar
+ Araçlar
- &Kodu çevir
+ Kodu çevir
- Bu araç için kullanılacak olan değişkenleri giriniz:
+ Araç argümanlarını giriniz:
- Harici program çalıştırma isteği başarısız oldu.
-Program:
+ Harici program çalıştırma başarısız.
+Başlatma hatası:
Çıkış Kodu:
@@ -5837,28 +7341,28 @@ Program:
Yeni GUID ekle
- &Seçenekler...
+ Seçenekler...
- Seri XML belgesi
+ Hızlı XML belgesi
- Düzenli İfadeler Alet kutusu
+ Düzenli İfadeler Araçseti
- &Görünüm
+ Görünüm
Hata Ayıklama
- &Tam ekran
+ Tam ekran
- Kur
+ Kurulum
- Diyaloglar
+ İletişim Kutuları
Dosyalar
@@ -5867,22 +7371,22 @@ Program:
Başlangıç sayfasını göster
- &Araçlar
+ Araçlar
- &Pencere
+ Pencere
- &Sonraki Pencere
+ Sonraki Pencere
- &Önceki Pencere
+ Önceki Pencere
- &Böl
+ Böl
- SharpDevelop Tarafından Oluşturulmuşdur.
+ SharpDevelop tarafından düzenlendi.
Tarih:
@@ -5897,16 +7401,16 @@ Program:
Kullanıcı:
- Ara Bellek Seçenekleri
+ Tampon Seçenekleri
Bölgeyi yorumla
- &Kopyala
+ Kopyala
- K&es
+ Kes
Dosya modu
@@ -5915,7 +7419,7 @@ Program:
Girinti
- &Yapıştır
+ Yapıştır
Yeniden Düzenleme
@@ -5924,7 +7428,6 @@ Program:
Bölgeyi yorumlama
- Bu kaynak kullanılmıyor. Bu kaynağın amacı, çeviri veritabanını kontrol etmektir. Bu yazıda bir satır sonu karakteri
-var.
+ Bu kaynak kullanılamıyor. Bu kaynağın amacı, çeviri veritabanını test etmektir. Bu yazıda bir satır sonu karakteri var.
\ No newline at end of file
diff --git a/data/templates/project/CSharp/ConsoleProject.xpt b/data/templates/project/CSharp/ConsoleProject.xpt
index 9d86c7158b..e70d36a92d 100644
--- a/data/templates/project/CSharp/ConsoleProject.xpt
+++ b/data/templates/project/CSharp/ConsoleProject.xpt
@@ -17,7 +17,7 @@
-
+
diff --git a/data/templates/project/CSharp/FormsProject.xpt b/data/templates/project/CSharp/FormsProject.xpt
index da5aa5f0b1..cb5f940129 100644
--- a/data/templates/project/CSharp/FormsProject.xpt
+++ b/data/templates/project/CSharp/FormsProject.xpt
@@ -18,7 +18,7 @@
-
+
diff --git a/data/templates/project/CSharp/NotifyIcon.xpt b/data/templates/project/CSharp/NotifyIcon.xpt
index 96f8a8436f..728cc1eb76 100644
--- a/data/templates/project/CSharp/NotifyIcon.xpt
+++ b/data/templates/project/CSharp/NotifyIcon.xpt
@@ -18,7 +18,7 @@
-
+
diff --git a/data/templates/project/CSharp/PortableAssemblyInfo.cs b/data/templates/project/CSharp/PortableAssemblyInfo.cs
new file mode 100644
index 0000000000..f33ea31a7c
--- /dev/null
+++ b/data/templates/project/CSharp/PortableAssemblyInfo.cs
@@ -0,0 +1,27 @@
+#region Using directives
+
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+#endregion
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("${ProjectName}")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("${ProjectName}")]
+[assembly: AssemblyCopyright("Copyright ${DATE:yyyy}")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has following format :
+//
+// Major.Minor.Build.Revision
+//
+// You can specify all the values or you can use the default the Revision and
+// Build Numbers by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.*")]
diff --git a/data/templates/project/CSharp/PortableLibrary.xpt b/data/templates/project/CSharp/PortableLibrary.xpt
new file mode 100644
index 0000000000..61a2c7f9f2
--- /dev/null
+++ b/data/templates/project/CSharp/PortableLibrary.xpt
@@ -0,0 +1,58 @@
+
+
+
+
+
+ ${res:Templates.Project.PortableLibrary.Name}
+ C#
+ C#.Project.Library
+ ${res:Templates.Project.PortableLibrary.Description}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Library
+ Properties
+ v4.0
+ Profile1
+
+
+
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+
+
+
+
+
+
+ /// Description of MyClass.
+ ///
+ public class MyClass
+ {
+
+ }
+}]]>
+
+
+
+
diff --git a/data/templates/project/CSharp/Service.xpt b/data/templates/project/CSharp/Service.xpt
index 4b09ccbd58..f3c5c63ea1 100644
--- a/data/templates/project/CSharp/Service.xpt
+++ b/data/templates/project/CSharp/Service.xpt
@@ -19,7 +19,7 @@
-
+
diff --git a/data/templates/project/CSharp/WPFApplication.xpt b/data/templates/project/CSharp/WPFApplication.xpt
index 290e13a564..2f31f78e58 100644
--- a/data/templates/project/CSharp/WPFApplication.xpt
+++ b/data/templates/project/CSharp/WPFApplication.xpt
@@ -16,7 +16,7 @@
-
+
diff --git a/data/templates/project/CSharp/WPFNavigationApplication.xpt b/data/templates/project/CSharp/WPFNavigationApplication.xpt
index 10d399d9b1..ee79449a7c 100644
--- a/data/templates/project/CSharp/WPFNavigationApplication.xpt
+++ b/data/templates/project/CSharp/WPFNavigationApplication.xpt
@@ -16,7 +16,7 @@
-
+
diff --git a/data/templates/project/ComplexExample.xpt.test b/data/templates/project/ComplexExample.xpt.test
index d2545654e5..65cb7aab41 100644
--- a/data/templates/project/ComplexExample.xpt.test
+++ b/data/templates/project/ComplexExample.xpt.test
@@ -16,6 +16,8 @@
+
+
@@ -33,7 +35,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
WinExe
@@ -123,11 +135,7 @@ End Class
-
-
-
-
-
+
diff --git a/data/templates/project/VB/ConsoleProject.xpt b/data/templates/project/VB/ConsoleProject.xpt
index 84efc781d8..ecf8df5a51 100644
--- a/data/templates/project/VB/ConsoleProject.xpt
+++ b/data/templates/project/VB/ConsoleProject.xpt
@@ -20,7 +20,7 @@
-
+
diff --git a/data/templates/project/VB/FormsProject.xpt b/data/templates/project/VB/FormsProject.xpt
index d155e0ea58..7ecdb77796 100644
--- a/data/templates/project/VB/FormsProject.xpt
+++ b/data/templates/project/VB/FormsProject.xpt
@@ -19,7 +19,7 @@
-
+
WinExe
Properties
diff --git a/data/templates/project/VB/NotifyIcon.xpt b/data/templates/project/VB/NotifyIcon.xpt
index 7fd00bbc6f..cd79b206b6 100644
--- a/data/templates/project/VB/NotifyIcon.xpt
+++ b/data/templates/project/VB/NotifyIcon.xpt
@@ -18,7 +18,7 @@
-
+
diff --git a/data/templates/project/VB/Service.xpt b/data/templates/project/VB/Service.xpt
index b6101d2692..6095f3a1c0 100644
--- a/data/templates/project/VB/Service.xpt
+++ b/data/templates/project/VB/Service.xpt
@@ -18,7 +18,7 @@
-
+
Exe
Properties
diff --git a/data/templates/project/VB/WPFApplication.xpt b/data/templates/project/VB/WPFApplication.xpt
index 17f5f1ad73..5cb8bf554c 100644
--- a/data/templates/project/VB/WPFApplication.xpt
+++ b/data/templates/project/VB/WPFApplication.xpt
@@ -16,7 +16,7 @@
-
+
diff --git a/data/templates/project/VB/WPFNavigationApplication.xpt b/data/templates/project/VB/WPFNavigationApplication.xpt
index c646f45b0a..643ffac041 100644
--- a/data/templates/project/VB/WPFNavigationApplication.xpt
+++ b/data/templates/project/VB/WPFNavigationApplication.xpt
@@ -16,7 +16,7 @@
-
+
diff --git a/src/AddIns/Analysis/UnitTesting/Test/Utils/MockCSharpProject.cs b/src/AddIns/Analysis/UnitTesting/Test/Utils/MockCSharpProject.cs
index 2be850a964..a0dac8a7cd 100644
--- a/src/AddIns/Analysis/UnitTesting/Test/Utils/MockCSharpProject.cs
+++ b/src/AddIns/Analysis/UnitTesting/Test/Utils/MockCSharpProject.cs
@@ -21,6 +21,7 @@ namespace UnitTesting.Tests.Utils
: base(new ProjectCreateInformation {
Solution = solution,
ProjectName = name,
+ Platform = "x86",
TargetFramework = TargetFramework.Net40Client,
OutputProjectFileName = "c:\\projects\\" + name + "\\" + name + ".csproj"
})
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
index 675b1dfeb4..9ff63194eb 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
@@ -55,8 +55,7 @@ namespace CSharpBinding
InitializeProjectContent(new CSharpProjectContent());
}
- public const string DefaultTargetsFile = @"$(MSBuildBinPath)\Microsoft.CSharp.Targets";
- public const string ExtendedTargetsFile = @"$(SharpDevelopBinPath)\SharpDevelop.Build.CSharp.targets";
+ public const string DefaultTargetsFile = @"$(MSBuildToolsPath)\Microsoft.CSharp.targets";
public CSharpProject(ProjectCreateInformation info)
: base(info)
@@ -92,13 +91,35 @@ namespace CSharpBinding
}
}
+ protected override ProjectBehavior CreateDefaultBehavior()
+ {
+ return new CSharpProjectBehavior(this, base.CreateDefaultBehavior());
+ }
+ }
+
+ public class CSharpProjectBehavior : ProjectBehavior
+ {
+ public CSharpProjectBehavior(CSharpProject project, ProjectBehavior next = null)
+ : base(project, next)
+ {
+
+ }
+
+ public override ItemType GetDefaultItemType(string fileName)
+ {
+ if (string.Equals(Path.GetExtension(fileName), ".cs", StringComparison.OrdinalIgnoreCase))
+ return ItemType.Compile;
+ else
+ return base.GetDefaultItemType(fileName);
+ }
+
static readonly CompilerVersion msbuild20 = new CompilerVersion(new Version(2, 0), "C# 2.0");
static readonly CompilerVersion msbuild35 = new CompilerVersion(new Version(3, 5), "C# 3.0");
static readonly CompilerVersion msbuild40 = new CompilerVersion(new Version(4, 0), DotnetDetection.IsDotnet45Installed() ? "C# 5.0" : "C# 4.0");
public override CompilerVersion CurrentCompilerVersion {
get {
- switch (MinimumSolutionVersion) {
+ switch (Project.MinimumSolutionVersion) {
case Solution.SolutionVersionVS2005:
return msbuild20;
case Solution.SolutionVersionVS2008:
@@ -123,66 +144,6 @@ namespace CSharpBinding
return versions;
}
- /*
- protected override void AddOrRemoveExtensions()
- {
- // Test if SharpDevelop-Build extensions are required
- bool needExtensions = false;
-
- foreach (var p in GetAllProperties("TargetFrameworkVersion")) {
- if (p.IsImported == false) {
- if (p.Value.StartsWith("CF")) {
- needExtensions = true;
- }
- }
- }
-
- foreach (Microsoft.Build.BuildEngine.Import import in MSBuildProject.Imports) {
- if (needExtensions) {
- if (DefaultTargetsFile.Equals(import.ProjectPath, StringComparison.OrdinalIgnoreCase)) {
- //import.ProjectPath = extendedTargets;
- MSBuildInternals.SetImportProjectPath(this, import, ExtendedTargetsFile);
- // Workaround for SD2-1490. It would be better if the project browser could refresh itself
- // when necessary.
- ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
- break;
- }
- } else {
- if (ExtendedTargetsFile.Equals(import.ProjectPath, StringComparison.OrdinalIgnoreCase)) {
- //import.ProjectPath = defaultTargets;
- MSBuildInternals.SetImportProjectPath(this, import, DefaultTargetsFile);
- // Workaround for SD2-1490. It would be better if the project browser could refresh itself
- // when necessary.
- ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
- break;
- }
- }
- }
- }
- */
-
- protected override ProjectBehavior CreateDefaultBehavior()
- {
- return new CSharpProjectBehavior(this, base.CreateDefaultBehavior());
- }
- }
-
- public class CSharpProjectBehavior : ProjectBehavior
- {
- public CSharpProjectBehavior(CSharpProject project, ProjectBehavior next = null)
- : base(project, next)
- {
-
- }
-
- public override ItemType GetDefaultItemType(string fileName)
- {
- if (string.Equals(Path.GetExtension(fileName), ".cs", StringComparison.OrdinalIgnoreCase))
- return ItemType.Compile;
- else
- return base.GetDefaultItemType(fileName);
- }
-
public override ISymbolSearch PrepareSymbolSearch(IEntity entity)
{
return CompositeSymbolSearch.Create(new CSharpSymbolSearch(Project, entity), base.PrepareSymbolSearch(entity));
diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs
index 5fa9e46fec..3cf7d13709 100644
--- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs
+++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs
@@ -832,22 +832,14 @@ namespace ICSharpCode.VBNetBinding
internal static bool IsBlockEnd(Token current, Token prev)
{
- if (current.Kind == Tokens.Next) {
- if (prev.Kind == Tokens.Resume)
- return false;
- else
- return true;
- }
+ if (current.Kind == Tokens.Next)
+ return prev.Kind == Tokens.EOL || prev.Kind == Tokens.Colon;
if (current.Kind == Tokens.Loop)
- return true;
+ return prev.Kind == Tokens.EOL || prev.Kind == Tokens.Colon;
- if (blockTokens.Contains(current.Kind)) {
- if (prev.Kind == Tokens.End)
- return true;
- else
- return false;
- }
+ if (blockTokens.Contains(current.Kind))
+ return prev.Kind == Tokens.End;
return IsSpecialCase(current, prev);
}
diff --git a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
index 0bf225886d..d6c1d6689c 100644
--- a/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
+++ b/src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
@@ -50,8 +50,7 @@ namespace ICSharpCode.VBNetBinding
InitVB();
}
- public const string DefaultTargetsFile = @"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets";
- public const string ExtendedTargetsFile = @"$(SharpDevelopBinPath)\SharpDevelop.Build.VisualBasic.targets";
+ public const string DefaultTargetsFile = @"$(MSBuildToolsPath)\Microsoft.VisualBasic.targets";
public VBNetProject(ProjectCreateInformation info)
: base(info)
@@ -109,43 +108,6 @@ namespace ICSharpCode.VBNetBinding
}
}
- /*
- protected override void AddOrRemoveExtensions()
- {
- // Test if SharpDevelop-Build extensions are required
- bool needExtensions = false;
-
- foreach (var p in GetAllProperties("TargetFrameworkVersion")) {
- if (p.IsImported == false) {
- if (p.Value.StartsWith("CF")) {
- needExtensions = true;
- }
- }
- }
-
- foreach (Microsoft.Build.BuildEngine.Import import in MSBuildProject.Imports) {
- if (needExtensions) {
- if (DefaultTargetsFile.Equals(import.ProjectPath, StringComparison.OrdinalIgnoreCase)) {
- //import.ProjectPath = extendedTargets;
- MSBuildInternals.SetImportProjectPath(this, import, ExtendedTargetsFile);
- // Workaround for SD2-1490. It would be better if the project browser could refresh itself
- // when necessary.
- ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
- break;
- }
- } else {
- if (ExtendedTargetsFile.Equals(import.ProjectPath, StringComparison.OrdinalIgnoreCase)) {
- //import.ProjectPath = defaultTargets;
- MSBuildInternals.SetImportProjectPath(this, import, DefaultTargetsFile);
- // Workaround for SD2-1490. It would be better if the project browser could refresh itself
- // when necessary.
- ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
- break;
- }
- }
- }
- }*/
-
public Nullable OptionInfer {
get { return GetValue("OptionInfer", false); }
}
diff --git a/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs b/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs
index 9bf3974b77..da07315820 100644
--- a/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs
+++ b/src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/IndentationTests.cs
@@ -524,6 +524,54 @@ End Module";
RunFormatTest(code, expected);
}
+ [Test]
+ public void ForNextOneLine()
+ {
+ string expected = @"Module Core
+ Sub Main
+ Dim a = 1
+ For i = 0 To 10 : Console.WriteLine(i) : Next
+ Dim b = 2
+ End Sub
+End Module";
+
+ string code = @"Module Core
+Sub Main
+Dim a = 1
+For i = 0 To 10 : Console.WriteLine(i) : Next
+Dim b = 2
+End Sub
+End Module";
+
+ RunFormatTest(code, expected);
+ }
+
+ [Test]
+ public void RandomNext()
+ {
+ string expected = @"Module Core
+ Public Function GetRandomNumber( _
+ Optional ByVal Low As Integer = 1, _
+ Optional ByVal High As Integer = 100) As Integer
+ ' Returns a random number,
+ ' between the optional Low and High parameters
+ Return objRandom.Next(Low, High + 1)
+ End Function
+End Module";
+
+ string code = @"Module Core
+Public Function GetRandomNumber( _
+Optional ByVal Low As Integer = 1, _
+Optional ByVal High As Integer = 100) As Integer
+' Returns a random number,
+' between the optional Low and High parameters
+Return objRandom.Next(Low, High + 1)
+End Function
+End Module";
+
+ RunFormatTest(code, expected);
+ }
+
void RunFormatTest(string code, string expectedCode)
{
AvalonEditTextEditorAdapter editor = new AvalonEditTextEditorAdapter(new TextEditor());
diff --git a/src/AddIns/BackendBindings/VBNetBinding/Test/MockTextEditor.cs b/src/AddIns/BackendBindings/VBNetBinding/Test/MockTextEditor.cs
index 72ebc330fb..616eebbb0d 100644
--- a/src/AddIns/BackendBindings/VBNetBinding/Test/MockTextEditor.cs
+++ b/src/AddIns/BackendBindings/VBNetBinding/Test/MockTextEditor.cs
@@ -49,7 +49,7 @@ namespace ICSharpCode.VBNetBinding.Tests
}
}
- this.TextEditor.TextArea.TextView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(this.TextEditor));
+// this.TextEditor.TextArea.TextView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(this.TextEditor));
this.TextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("VBNet");
new VBNetLanguageBinding().Attach(this);
diff --git a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/MockTextEditor.cs b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/MockTextEditor.cs
index ef51604d6f..60c566a507 100644
--- a/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/MockTextEditor.cs
+++ b/src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/MockTextEditor.cs
@@ -50,7 +50,7 @@ namespace ICSharpCode.XamlBinding.Tests
}
}
- this.TextEditor.TextArea.TextView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(this.TextEditor));
+// this.TextEditor.TextArea.TextView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(this.TextEditor));
this.TextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("XML");
new XamlLanguageBinding().Attach(this);
diff --git a/src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingSymbolsPanel.resx b/src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingSymbolsPanel.resx
index 7080a7d118..1af7de150c 100644
--- a/src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingSymbolsPanel.resx
+++ b/src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingSymbolsPanel.resx
@@ -112,9 +112,9 @@
2.0
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
\ No newline at end of file
diff --git a/src/AddIns/Debugger/Debugger.Core/IDStringProvider.cs b/src/AddIns/Debugger/Debugger.Core/IDStringProvider.cs
index 36eaaf1d05..75162c8d2f 100644
--- a/src/AddIns/Debugger/Debugger.Core/IDStringProvider.cs
+++ b/src/AddIns/Debugger/Debugger.Core/IDStringProvider.cs
@@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
+using Debugger.MetaData;
namespace Debugger
{
@@ -42,7 +43,11 @@ namespace Debugger
MethodInfo mr = (MethodInfo)member;
if (mr.IsGenericMethod) {
b.Append("``");
- b.Append(mr.GetGenericArguments().Length);
+ // DebugMethodInfo does not implement GetGenericArguments
+ if (mr is DebugMethodInfo)
+ b.Append(((DebugMethodInfo)mr).GenericParameterCount);
+ else
+ b.Append(mr.GetGenericArguments().Length);
}
parameters = mr.GetParameters();
if (mr.Name == "op_Implicit" || mr.Name == "op_Explicit") {
@@ -73,7 +78,7 @@ namespace Debugger
return;
}
if (type.IsGenericType) {
- AppendTypeNameWithArguments(b, type.GetElementType(), type.GetGenericArguments());
+ AppendTypeNameWithArguments(b, type, type.GetGenericArguments());
} else if (type.HasElementType) {
AppendTypeName(b, type.GetElementType());
if (type.IsArray) {
diff --git a/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs b/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
index 37a0fed063..2f8f659726 100644
--- a/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
+++ b/src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
@@ -195,6 +195,13 @@ namespace Debugger.MetaData
get { return this.MethodDefSig.GenericParameterCount > 0; }
}
+ ///
+ /// Gets the number of generic parameters on this method.
+ ///
+ public int GenericParameterCount {
+ get { return this.MethodDefSig.GenericParameterCount; }
+ }
+
///
public override RuntimeMethodHandle MethodHandle {
get { throw new NotSupportedException(); }
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
index 826e8cdab4..c6fd21ccc2 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
@@ -67,6 +67,9 @@
+
+ 3.5
+
3.0
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs
index 2634a84377..b4136bd06d 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs
@@ -43,6 +43,35 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
+ #region Brushes
+ public static readonly DependencyProperty AddedLineBrushProperty =
+ DependencyProperty.Register("AddedLineBrush", typeof(Brush), typeof(ChangeMarkerMargin),
+ new FrameworkPropertyMetadata(Brushes.LightGreen));
+
+ public Brush AddedLineBrush {
+ get { return (Brush)GetValue(AddedLineBrushProperty); }
+ set { SetValue(AddedLineBrushProperty, value); }
+ }
+
+ public static readonly DependencyProperty ChangedLineBrushProperty =
+ DependencyProperty.Register("ChangedLineBrush", typeof(Brush), typeof(ChangeMarkerMargin),
+ new FrameworkPropertyMetadata(Brushes.LightBlue));
+
+ public Brush ChangedLineBrush {
+ get { return (Brush)GetValue(ChangedLineBrushProperty); }
+ set { SetValue(ChangedLineBrushProperty, value); }
+ }
+
+ public static readonly DependencyProperty UnsavedLineBrushProperty =
+ DependencyProperty.Register("UnsavedLineBrush", typeof(Brush), typeof(ChangeMarkerMargin),
+ new FrameworkPropertyMetadata(Brushes.Yellow));
+
+ public Brush UnsavedLineBrush {
+ get { return (Brush)GetValue(UnsavedLineBrushProperty); }
+ set { SetValue(UnsavedLineBrushProperty, value); }
+ }
+ #endregion
+
protected override void OnRender(DrawingContext drawingContext)
{
Size renderSize = this.RenderSize;
@@ -52,7 +81,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
var zeroLineInfo = changeWatcher.GetChange(0);
foreach (VisualLine line in textView.VisualLines) {
- Rect rect = new Rect(0, line.VisualTop - textView.ScrollOffset.Y, 5, line.Height);
+ Rect rect = new Rect(0, line.VisualTop - textView.ScrollOffset.Y - 1, 5, line.Height + 2);
LineChangeInfo info = changeWatcher.GetChange(line.FirstDocumentLine.LineNumber);
@@ -64,14 +93,14 @@ namespace ICSharpCode.AvalonEdit.AddIn
case ChangeType.None:
break;
case ChangeType.Added:
- drawingContext.DrawRectangle(Brushes.LightGreen, null, rect);
+ drawingContext.DrawRectangle(AddedLineBrush, null, rect);
break;
case ChangeType.Deleted:
case ChangeType.Modified:
- drawingContext.DrawRectangle(Brushes.LightBlue, null, rect);
+ drawingContext.DrawRectangle(ChangedLineBrush, null, rect);
break;
case ChangeType.Unsaved:
- drawingContext.DrawRectangle(Brushes.Yellow, null, rect);
+ drawingContext.DrawRectangle(UnsavedLineBrush, null, rect);
break;
default:
throw new Exception("Invalid value for ChangeType");
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
index f393ea9bef..9440a780f5 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
@@ -36,7 +36,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
/// Integrates AvalonEdit with SharpDevelop.
/// Also provides support for Split-View (showing two AvalonEdit instances using the same TextDocument)
///
- public class CodeEditor : Grid, IDisposable, ICodeEditor
+ public class CodeEditor : Grid, IDisposable
{
const string contextMenuPath = "/SharpDevelop/ViewContent/AvalonEdit/ContextMenu";
@@ -144,9 +144,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
SD.ParserService.ParseInformationUpdated += ParserServiceParseInformationUpdated;
this.FlowDirection = FlowDirection.LeftToRight; // code editing is always left-to-right
+ this.document = new TextDocument();
this.CommandBindings.Add(new CommandBinding(SharpDevelopRoutedCommands.SplitView, OnSplitView));
-
- textMarkerService = new TextMarkerService(this);
+ textMarkerService = new TextMarkerService(document);
iconBarManager = new IconBarManager();
if (CodeEditorOptions.Instance.EnableChangeMarkerMargin) {
changeWatcher = new DefaultChangeWatcher();
@@ -156,9 +156,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
Debug.Assert(primaryTextEditorAdapter != null);
activeTextEditor = primaryTextEditor;
- this.Document = primaryTextEditor.Document;
- primaryTextEditor.SetBinding(TextEditor.DocumentProperty, new Binding("Document") { Source = this });
-
this.ColumnDefinitions.Add(new ColumnDefinition());
this.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star), MinHeight = minRowHeight });
@@ -180,6 +177,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
primaryTextEditor.UpdateCustomizedHighlighting();
if (secondaryTextEditor != null)
secondaryTextEditor.UpdateCustomizedHighlighting();
+ foreach (var bookmark in BookmarkManager.GetBookmarks(fileName).OfType())
+ bookmark.SetMarker();
}
///
@@ -190,6 +189,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
CodeEditorView codeEditorView = new CodeEditorView();
CodeEditorAdapter adapter = new CodeEditorAdapter(this, codeEditorView);
codeEditorView.Adapter = adapter;
+ codeEditorView.Document = document;
TextView textView = codeEditorView.TextArea.TextView;
textView.Services.AddService(typeof(ITextEditor), adapter);
textView.Services.AddService(typeof(CodeEditor), this);
@@ -304,11 +304,29 @@ namespace ICSharpCode.AvalonEdit.AddIn
NewLineConsistencyCheck.StartConsistencyCheck(this);
}
+ bool documentFirstLoad = true;
+ bool clearUndoStackOnSwitch = true;
+
+ ///
+ /// Gets/Sets whether to clear the undo stack when reloading the document.
+ /// The default is true.
+ /// http://community.sharpdevelop.net/forums/t/15816.aspx
+ ///
+ public bool ClearUndoStackOnSwitch {
+ get { return clearUndoStackOnSwitch; }
+ set { clearUndoStackOnSwitch = value; }
+ }
+
void ReloadDocument(TextDocument document, string newContent)
{
var diff = new MyersDiffAlgorithm(new StringSequence(document.Text), new StringSequence(newContent));
document.Replace(0, document.TextLength, newContent, diff.GetEdits().ToOffsetChangeMap());
- document.UndoStack.ClearAll();
+
+ if (this.ClearUndoStackOnSwitch || documentFirstLoad)
+ document.UndoStack.ClearAll();
+
+ if (documentFirstLoad)
+ documentFirstLoad = false;
}
public event EventHandler LoadedFileContent;
@@ -331,8 +349,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
secondaryTextEditorAdapter = (CodeEditorAdapter)secondaryTextEditor.TextArea.GetService(typeof(ITextEditor));
Debug.Assert(primaryTextEditorAdapter != null);
- secondaryTextEditor.SetBinding(TextEditor.DocumentProperty,
- new Binding(TextEditor.DocumentProperty.Name) { Source = primaryTextEditor });
secondaryTextEditor.SetBinding(TextEditor.IsReadOnlyProperty,
new Binding(TextEditor.IsReadOnlyProperty.Name) { Source = primaryTextEditor });
secondaryTextEditor.SyntaxHighlighting = primaryTextEditor.SyntaxHighlighting;
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
index 5a371b1553..f3cad8d692 100755
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorView.cs
@@ -14,6 +14,7 @@ using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Documents;
using System.Windows.Input;
+using System.Windows.Media;
using System.Windows.Threading;
using ICSharpCode.AvalonEdit.AddIn.ContextActions;
@@ -95,13 +96,17 @@ namespace ICSharpCode.AvalonEdit.AddIn
protected override void OnOptionChanged(PropertyChangedEventArgs e)
{
base.OnOptionChanged(e);
- if (e.PropertyName == "HighlightBrackets")
- HighlightBrackets(null, e);
- else if (e.PropertyName == "EnableFolding")
- UpdateParseInformationForFolding();
- else if (e.PropertyName == "HighlightSymbol") {
- //if (this.caretReferencesRenderer != null)
- // this.caretReferencesRenderer.ClearHighlight();
+ switch (e.PropertyName) {
+ case "HighlightBrackets":
+ HighlightBrackets(null, e);
+ break;
+ case "EnableFolding":
+ UpdateParseInformationForFolding();
+ break;
+ case "HighlightSymbol":
+ //if (this.caretReferencesRenderer != null)
+ // this.caretReferencesRenderer.ClearHighlight();
+ break;
}
}
@@ -584,18 +589,13 @@ namespace ICSharpCode.AvalonEdit.AddIn
string language = this.SyntaxHighlighting != null ? this.SyntaxHighlighting.Name : null;
CustomizableHighlightingColorizer.ApplyCustomizationsToDefaultElements(this, FetchCustomizations(language));
BracketHighlightRenderer.ApplyCustomizationsToRendering(this.bracketRenderer, FetchCustomizations(language));
- HighlightingOptions.ApplyToFolding(this, FetchCustomizations(language));
+ HighlightingOptions.ApplyToRendering(this, FetchCustomizations(language));
this.TextArea.TextView.Redraw(); // manually redraw if default elements didn't change but customized highlightings did
}
static IEnumerable FetchCustomizations(string languageName)
{
- // Access CustomizedHighlightingColor.ActiveColors within enumerator so that always the latest version is used.
- // Using CustomizedHighlightingColor.ActiveColors.Where(...) would not work correctly!
- foreach (CustomizedHighlightingColor color in CustomizedHighlightingColor.ActiveColors) {
- if (color.Language == null || color.Language == languageName)
- yield return color;
- }
+ return CustomizedHighlightingColor.FetchCustomizations(languageName);
}
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ContextActionsBulbControl.xaml b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ContextActionsBulbControl.xaml
index 854acaf15c..1664bef4a5 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ContextActionsBulbControl.xaml
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ContextActionsBulbControl.xaml
@@ -2,6 +2,7 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ICSharpCode.AvalonEdit.AddIn.ContextActions"
+ xmlns:widgets="http://icsharpcode.net/sharpdevelop/widgets"
xmlns:aero="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
@@ -225,9 +226,9 @@
-
+
-
+
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizableHighlightingColorizer.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizableHighlightingColorizer.cs
index 23b7f00af1..97ecfdeaef 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizableHighlightingColorizer.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizableHighlightingColorizer.cs
@@ -28,6 +28,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
public const string SelectedText = "Selected text";
public const string NonPrintableCharacters = "Non-printable characters";
public const string LineNumbers = "Line numbers";
+ public const string LinkText = "Link text";
+ public const string BreakpointMarker = "Breakpoint";
+ public const string InstructionPointerMarker = "Current statement";
public static void ApplyCustomizationsToDefaultElements(TextEditor textEditor, IEnumerable customizations)
{
@@ -38,6 +41,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
textEditor.TextArea.ClearValue(TextArea.SelectionBrushProperty);
textEditor.TextArea.ClearValue(TextArea.SelectionForegroundProperty);
textEditor.TextArea.TextView.ClearValue(TextView.NonPrintableCharacterBrushProperty);
+ textEditor.TextArea.TextView.ClearValue(TextView.LinkTextForegroundBrushProperty);
+ textEditor.TextArea.TextView.ClearValue(TextView.LinkTextBackgroundBrushProperty);
+ textEditor.TextArea.TextView.ClearValue(TextView.ColumnRulerBrushProperty);
// 'assigned' flags are used so that the first matching customization wins.
// This is necessary because more specific customizations come first in the list
@@ -46,6 +52,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
bool assignedSelectedText = false;
bool assignedNonPrintableCharacter = false;
bool assignedLineNumbers = false;
+ bool assignedLinkText = false;
+ bool assignedColumnRulerColor = false;
+
foreach (CustomizedHighlightingColor color in customizations) {
switch (color.Name) {
case DefaultTextAndBackground:
@@ -92,6 +101,22 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (color.Foreground != null)
textEditor.LineNumbersForeground = CreateFrozenBrush(color.Foreground.Value);
break;
+ case LinkText:
+ if (assignedLinkText)
+ continue;
+ assignedLinkText = true;
+ if (color.Foreground != null)
+ textEditor.TextArea.TextView.LinkTextForegroundBrush = CreateFrozenBrush(color.Foreground.Value);
+ if (color.Background != null)
+ textEditor.TextArea.TextView.LinkTextBackgroundBrush = CreateFrozenBrush(color.Background.Value);
+ break;
+ case ColumnRulerRenderer.Name:
+ if (assignedColumnRulerColor)
+ continue;
+ assignedColumnRulerColor = true;
+ if (color.Foreground != null)
+ textEditor.TextArea.TextView.ColumnRulerBrush = CreateFrozenBrush(color.Foreground.Value);
+ break;
}
}
}
@@ -217,37 +242,11 @@ namespace ICSharpCode.AvalonEdit.AddIn
line.MergeWith(h.HighlightLine(lineNumber));
}
foreach (HighlightedSection section in line.Sections) {
- section.Color = CustomizeColor(section.Color);
+ section.Color = CustomizeColor(section.Color, customizations);
}
return line;
}
-
- HighlightingColor CustomizeColor(HighlightingColor color)
- {
- if (color == null || color.Name == null)
- return color;
- foreach (CustomizedHighlightingColor customization in customizations) {
- if (customization.Name == color.Name) {
- return new HighlightingColor {
- Name = color.Name,
- Background = CreateBrush(customization.Background),
- Foreground = CreateBrush(customization.Foreground),
- FontWeight = customization.Bold ? FontWeights.Bold : FontWeights.Normal,
- FontStyle = customization.Italic ? FontStyles.Italic : FontStyles.Normal
- };
- }
- }
- return color;
- }
-
- static HighlightingBrush CreateBrush(Color? color)
- {
- if (color == null)
- return null;
- else
- return new CustomizedBrush(color.Value);
- }
-
+
public void InvalidateLine(IDocumentLine line)
{
textView.Redraw(line, DispatcherPriority.Background);
@@ -284,6 +283,42 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
return result;
}
+
+ public HighlightingColor GetNamedColor(string name)
+ {
+ return CustomizeColor(name, CustomizedHighlightingColor.FetchCustomizations(highlightingDefinition.Name));
+ }
+ }
+
+ internal static HighlightingColor CustomizeColor(HighlightingColor color, IEnumerable customizations)
+ {
+ if (color == null || color.Name == null)
+ return color;
+ return CustomizeColor(color.Name, customizations) ?? color;
+ }
+
+ internal static HighlightingColor CustomizeColor(string name, IEnumerable customizations)
+ {
+ foreach (CustomizedHighlightingColor customization in customizations) {
+ if (customization.Name == name) {
+ return new HighlightingColor {
+ Name = name,
+ Background = CreateBrush(customization.Background),
+ Foreground = CreateBrush(customization.Foreground),
+ FontWeight = customization.Bold ? FontWeights.Bold : FontWeights.Normal,
+ FontStyle = customization.Italic ? FontStyles.Italic : FontStyles.Normal
+ };
+ }
+ }
+ return null;
+ }
+
+ static HighlightingBrush CreateBrush(Color? color)
+ {
+ if (color == null)
+ return null;
+ else
+ return new CustomizedBrush(color.Value);
}
sealed class CustomizedBrush : HighlightingBrush
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizedHighlightingColor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizedHighlightingColor.cs
index 429082a88e..fa924f171d 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizedHighlightingColor.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizedHighlightingColor.cs
@@ -61,6 +61,16 @@ namespace ICSharpCode.AvalonEdit.AddIn
}
}
+ public static IEnumerable FetchCustomizations(string languageName)
+ {
+ // Access CustomizedHighlightingColor.ActiveColors within enumerator so that always the latest version is used.
+ // Using CustomizedHighlightingColor.ActiveColors.Where(...) would not work correctly!
+ foreach (CustomizedHighlightingColor color in CustomizedHighlightingColor.ActiveColors) {
+ if (color.Language == null || color.Language == languageName)
+ yield return color;
+ }
+ }
+
///
/// Occurs when the set of customized highlighting colors was changed.
///
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CodeEditorOptions.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CodeEditorOptions.cs
index b53244154e..02cec38543 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CodeEditorOptions.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/CodeEditorOptions.cs
@@ -254,7 +254,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
}
int ITextEditorOptions.VerticalRulerColumn {
- get { return 120; }
+ get { return ColumnRulerPosition; }
}
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml
index f8ab41dd0c..0fec4ce0d4 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml
@@ -1,45 +1,62 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs
index 169d9f6b57..b2f7dad566 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/HighlightingOptions.xaml.cs
@@ -5,22 +5,28 @@ using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
+using System.Globalization;
using System.IO;
using System.Linq;
+using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Xml;
-
+using System.Xml.Linq;
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Folding;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Highlighting.Xshd;
using ICSharpCode.AvalonEdit.Rendering;
+using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Bookmarks;
+using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
using ICSharpCode.SharpDevelop.Gui;
+using Microsoft.Win32;
namespace ICSharpCode.AvalonEdit.AddIn.Options
{
@@ -33,18 +39,22 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
InitializeComponent();
textEditor.Document.UndoStack.SizeLimit = 0;
- textEditor.Options = CodeEditorOptions.Instance;
+ CodeEditorOptions.Instance.BindToTextEditor(textEditor);
+ textEditor.Options = new TextEditorOptions(CodeEditorOptions.Instance);
bracketHighlighter = new BracketHighlightRenderer(textEditor.TextArea.TextView);
foldingManager = FoldingManager.Install(textEditor.TextArea);
- CodeEditorOptions.Instance.BindToTextEditor(textEditor);
+ textMarkerService = new TextMarkerService(textEditor.Document);
+ textEditor.TextArea.TextView.BackgroundRenderers.Add(textMarkerService);
+ textEditor.TextArea.TextView.LineTransformers.Add(textMarkerService);
+ textEditor.TextArea.TextView.Services.AddService(typeof(ITextMarkerService), textMarkerService);
}
BracketHighlightRenderer bracketHighlighter;
FoldingManager foldingManager;
+ TextMarkerService textMarkerService;
+ ITextMarker marker;
List customizationList;
- #region Folding
- // TODO : probably move this to a separate class!
public const string FoldingControls = "Folding controls";
public const string FoldingSelectedControls = "Selected folding controls";
public const string FoldingTextMarkers = "Folding markers";
@@ -56,7 +66,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
return brush;
}
- public static void ApplyToFolding(TextEditor editor, IEnumerable customisations)
+ public static void ApplyToRendering(TextEditor editor, IEnumerable customisations)
{
bool assignedFoldingMarker = false, assignedSelectedFoldingControls = false, assignedFoldingTextMarkers = false;
@@ -67,6 +77,16 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
FoldingElementGenerator.TextBrush = FoldingElementGenerator.DefaultTextBrush;
+ bool assignedErrorColor = false;
+ bool assignedWarningColor = false;
+ bool assignedMessageColor = false;
+
+ foreach (var instance in ErrorPainter.Instances) {
+ instance.ErrorColor = Colors.Red;
+ instance.WarningColor = Colors.Orange;
+ instance.MessageColor = Colors.Blue;
+ }
+
foreach (CustomizedHighlightingColor color in customisations) {
switch (color.Name) {
case FoldingControls:
@@ -74,18 +94,22 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
continue;
assignedFoldingMarker = true;
if (color.Foreground != null)
- editor.SetValue(FoldingMargin.FoldingMarkerBrushProperty, CreateFrozenBrush(color.Foreground.Value));
+ editor.SetValue(FoldingMargin.FoldingMarkerBrushProperty,
+ CreateFrozenBrush(color.Foreground.Value));
if (color.Background != null)
- editor.SetValue(FoldingMargin.FoldingMarkerBackgroundBrushProperty, CreateFrozenBrush(color.Background.Value));
+ editor.SetValue(FoldingMargin.FoldingMarkerBackgroundBrushProperty,
+ CreateFrozenBrush(color.Background.Value));
break;
case FoldingSelectedControls:
if (assignedSelectedFoldingControls)
continue;
assignedSelectedFoldingControls = true;
if (color.Foreground != null)
- editor.SetValue(FoldingMargin.SelectedFoldingMarkerBrushProperty, CreateFrozenBrush(color.Foreground.Value));
+ editor.SetValue(FoldingMargin.SelectedFoldingMarkerBrushProperty,
+ CreateFrozenBrush(color.Foreground.Value));
if (color.Background != null)
- editor.SetValue(FoldingMargin.SelectedFoldingMarkerBackgroundBrushProperty, CreateFrozenBrush(color.Background.Value));
+ editor.SetValue(FoldingMargin.SelectedFoldingMarkerBackgroundBrushProperty,
+ CreateFrozenBrush(color.Background.Value));
break;
case FoldingTextMarkers:
if (assignedFoldingTextMarkers)
@@ -94,10 +118,39 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
if (color.Foreground != null)
FoldingElementGenerator.TextBrush = CreateFrozenBrush(color.Foreground.Value);
break;
+ case ErrorPainter.ErrorColorName:
+ if (assignedErrorColor)
+ continue;
+ assignedErrorColor = true;
+ if (color.Foreground != null) {
+ foreach (var instance in ErrorPainter.Instances) {
+ instance.ErrorColor = color.Foreground.Value;
+ }
+ }
+ break;
+ case ErrorPainter.WarningColorName:
+ if (assignedWarningColor)
+ continue;
+ assignedWarningColor = true;
+ if (color.Foreground != null) {
+ foreach (var instance in ErrorPainter.Instances) {
+ instance.WarningColor = color.Foreground.Value;
+ }
+ }
+ break;
+ case ErrorPainter.MessageColorName:
+ if (assignedMessageColor)
+ continue;
+ assignedMessageColor = true;
+ if (color.Foreground != null) {
+ foreach (var instance in ErrorPainter.Instances) {
+ instance.MessageColor = color.Foreground.Value;
+ }
+ }
+ break;
}
}
}
- #endregion
XshdSyntaxDefinition LoadBuiltinXshd(string name)
{
@@ -130,6 +183,8 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
}
customizationList = new List(CustomizedHighlightingColor.LoadColors());
+ CreateDefaultEntries(null, out defaultText, defaultEntries);
+
languageComboBox.Items.Clear();
languageComboBox.Items.Add(new XshdSyntaxDefinition { Name = "All languages" });
foreach (XshdSyntaxDefinition def in allSyntaxDefinitions)
@@ -140,11 +195,13 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
void LanguageComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
- listBox.Items.Clear();
+ listBox.ItemsSource = null;
XshdSyntaxDefinition xshd = (XshdSyntaxDefinition)languageComboBox.SelectedItem;
if (xshd != null) {
IHighlightingItem defaultText;
- CreateDefaultEntries(languageComboBox.SelectedIndex == 0 ? null : xshd.Name, out defaultText);
+ List list = new List();
+ CreateDefaultEntries(languageComboBox.SelectedIndex == 0 ? null : xshd.Name, out defaultText, list);
+ listBox.ItemsSource = list;
if (languageComboBox.SelectedIndex > 0) {
// Create entries for all customizable colors in the syntax highlighting definition
@@ -168,18 +225,16 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
}
}
- void CreateDefaultEntries(string language, out IHighlightingItem defaultText)
+ void CreateDefaultEntries(string language, out IHighlightingItem defaultText, IList items)
{
// Create entry for "default text/background"
defaultText = new SimpleHighlightingItem(CustomizableHighlightingColorizer.DefaultTextAndBackground, ta => ta.Document.Text = "Normal text") {
Foreground = SystemColors.WindowTextColor,
Background = SystemColors.WindowColor
};
- defaultText = new CustomizedHighlightingItem(customizationList, defaultText, null, canSetFont: false);
- if (language != null)
- defaultText = new CustomizedHighlightingItem(customizationList, defaultText, language, canSetFont: false);
+ defaultText = new CustomizedHighlightingItem(customizationList, defaultText, language, canSetFont: false);
defaultText.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(defaultText);
+ items.Add(defaultText);
// Create entry for "Selected text"
IHighlightingItem selectedText = new SimpleHighlightingItem(
@@ -192,11 +247,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
Foreground = SystemColors.HighlightTextColor,
Background = SystemColors.HighlightColor
};
- selectedText = new CustomizedHighlightingItem(customizationList, selectedText, null, canSetFont: false);
- if (language != null)
- selectedText = new CustomizedHighlightingItem(customizationList, selectedText, language, canSetFont: false);
+ selectedText = new CustomizedHighlightingItem(customizationList, selectedText, language, canSetFont: false);
selectedText.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(selectedText);
+ items.Add(selectedText);
// Create entry for "Non-printable characters"
IHighlightingItem nonPrintChars = new SimpleHighlightingItem(
@@ -207,11 +260,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
{
Foreground = Colors.LightGray
};
- nonPrintChars = new CustomizedHighlightingItem(customizationList, nonPrintChars, null, canSetFont: false, canSetBackground: false);
- if (language != null)
- nonPrintChars = new CustomizedHighlightingItem(customizationList, nonPrintChars, language, canSetFont: false);
+ nonPrintChars = new CustomizedHighlightingItem(customizationList, nonPrintChars, language, canSetFont: false, canSetBackground: false);
nonPrintChars.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(nonPrintChars);
+ items.Add(nonPrintChars);
// Create entry for "Line numbers"
IHighlightingItem lineNumbers = new SimpleHighlightingItem(
@@ -225,11 +276,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
{
Foreground = Colors.Gray
};
- lineNumbers = new CustomizedHighlightingItem(customizationList, lineNumbers, null, canSetFont: false, canSetBackground: false);
- if (language != null)
- lineNumbers = new CustomizedHighlightingItem(customizationList, lineNumbers, language, canSetFont: false);
+ lineNumbers = new CustomizedHighlightingItem(customizationList, lineNumbers, language, canSetFont: false, canSetBackground: false);
lineNumbers.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(lineNumbers);
+ items.Add(lineNumbers);
// Create entry for "Bracket highlight"
IHighlightingItem bracketHighlight = new SimpleHighlightingItem(
@@ -247,11 +296,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
Foreground = BracketHighlightRenderer.DefaultBorder,
Background = BracketHighlightRenderer.DefaultBackground
};
- bracketHighlight = new CustomizedHighlightingItem(customizationList, bracketHighlight, null, canSetFont: false);
- if (language != null)
- bracketHighlight = new CustomizedHighlightingItem(customizationList, bracketHighlight, language, canSetFont: false);
+ bracketHighlight = new CustomizedHighlightingItem(customizationList, bracketHighlight, language, canSetFont: false);
bracketHighlight.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(bracketHighlight);
+ items.Add(bracketHighlight);
// Create entry for "Folding controls"
IHighlightingItem foldingControls = new SimpleHighlightingItem(
@@ -266,11 +313,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
Foreground = Colors.Gray,
Background = Colors.White
};
- foldingControls = new CustomizedHighlightingItem(customizationList, foldingControls, null, canSetFont: false);
- if (language != null)
- foldingControls = new CustomizedHighlightingItem(customizationList, foldingControls, language, canSetFont: false);
+ foldingControls = new CustomizedHighlightingItem(customizationList, foldingControls, language, canSetFont: false);
foldingControls.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(foldingControls);
+ items.Add(foldingControls);
// Create entry for "Selected folding controls"
IHighlightingItem selectedFoldingControls = new SimpleHighlightingItem(
@@ -285,11 +330,9 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
Foreground = Colors.Black,
Background = Colors.White
};
- selectedFoldingControls = new CustomizedHighlightingItem(customizationList, selectedFoldingControls, null, canSetFont: false);
- if (language != null)
- selectedFoldingControls = new CustomizedHighlightingItem(customizationList, selectedFoldingControls, language, canSetFont: false);
+ selectedFoldingControls = new CustomizedHighlightingItem(customizationList, selectedFoldingControls, language, canSetFont: false);
selectedFoldingControls.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(selectedFoldingControls);
+ items.Add(selectedFoldingControls);
// Create entry for "Folding text markers"
IHighlightingItem foldingTextMarker = new SimpleHighlightingItem(
@@ -303,14 +346,106 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
{
Foreground = Colors.Gray
};
- foldingTextMarker = new CustomizedHighlightingItem(customizationList, foldingTextMarker, null, canSetFont: false, canSetBackground: false);
- if (language != null)
- foldingControls = new CustomizedHighlightingItem(customizationList, foldingTextMarker, language, canSetFont: false, canSetBackground: false);
+ foldingTextMarker = new CustomizedHighlightingItem(customizationList, foldingTextMarker, language, canSetFont: false, canSetBackground: false);
foldingTextMarker.PropertyChanged += item_PropertyChanged;
- listBox.Items.Add(foldingTextMarker);
+ items.Add(foldingTextMarker);
+
+ IHighlightingItem linkText = new SimpleHighlightingItem(
+ CustomizableHighlightingColorizer.LinkText,
+ ta => {
+ ta.Document.Text = "http://icsharpcode.net" + Environment.NewLine + "me@example.com";
+ })
+ {
+ Foreground = Colors.Blue,
+ Background = Colors.Transparent
+ };
+ linkText = new CustomizedHighlightingItem(customizationList, linkText, language, canSetFont: false);
+ linkText.PropertyChanged += item_PropertyChanged;
+ items.Add(linkText);
+
+ IHighlightingItem errorMarker = new SimpleHighlightingItem(
+ ErrorPainter.ErrorColorName,
+ ta => {
+ ta.Document.Text = "some error";
+ marker = textMarkerService.Create(0, 5);
+ })
+ {
+ Foreground = Colors.Red
+ };
+ errorMarker = new CustomizedHighlightingItem(customizationList, errorMarker, language, canSetFont: false, canSetBackground: false);
+ errorMarker.PropertyChanged += item_PropertyChanged;
+ items.Add(errorMarker);
+
+ IHighlightingItem warningMarker = new SimpleHighlightingItem(
+ ErrorPainter.WarningColorName,
+ ta => {
+ ta.Document.Text = "some warning";
+ marker = textMarkerService.Create(0, 5);
+ })
+ {
+ Foreground = Colors.Orange
+ };
+ warningMarker = new CustomizedHighlightingItem(customizationList, warningMarker, language, canSetFont: false, canSetBackground: false);
+ warningMarker.PropertyChanged += item_PropertyChanged;
+ items.Add(warningMarker);
+
+ IHighlightingItem messageMarker = new SimpleHighlightingItem(
+ ErrorPainter.MessageColorName,
+ ta => {
+ ta.Document.Text = "some message";
+ marker = textMarkerService.Create(0, 5);
+ })
+ {
+ Foreground = Colors.Blue
+ };
+ messageMarker = new CustomizedHighlightingItem(customizationList, messageMarker, language, canSetFont: false, canSetBackground: false);
+ messageMarker.PropertyChanged += item_PropertyChanged;
+ items.Add(messageMarker);
+
+ IHighlightingItem breakpointMarker = new SimpleHighlightingItem(
+ BreakpointBookmark.BreakpointMarker,
+ ta => {
+ ta.Document.Text = "some code with a breakpoint";
+ marker = textMarkerService.Create(0, ta.Document.TextLength);
+ })
+ {
+ Background = BreakpointBookmark.DefaultBackground,
+ Foreground = BreakpointBookmark.DefaultForeground
+ };
+ breakpointMarker = new CustomizedHighlightingItem(customizationList, breakpointMarker, language, canSetFont: false);
+ breakpointMarker.PropertyChanged += item_PropertyChanged;
+ items.Add(breakpointMarker);
+
+ IHighlightingItem currentStatementMarker = new SimpleHighlightingItem(
+ CurrentLineBookmark.Name,
+ ta => {
+ ta.Document.Text = "current statement line";
+ marker = textMarkerService.Create(0, ta.Document.TextLength);
+ })
+ {
+ Background = CurrentLineBookmark.DefaultBackground,
+ Foreground = CurrentLineBookmark.DefaultForeground
+ };
+ currentStatementMarker = new CustomizedHighlightingItem(customizationList, currentStatementMarker, language, canSetFont: false);
+ currentStatementMarker.PropertyChanged += item_PropertyChanged;
+ items.Add(currentStatementMarker);
+
+ IHighlightingItem columnRuler = new SimpleHighlightingItem(
+ ColumnRulerRenderer.Name,
+ ta => {
+ ta.Document.Text = "some line with a lot of text";
+ ta.TextView.Options.ColumnRulerPosition = 15;
+ ta.TextView.Options.ShowColumnRuler = true;
+ })
+ {
+ Foreground = ColumnRulerRenderer.DefaultForeground
+ };
+ columnRuler = new CustomizedHighlightingItem(customizationList, columnRuler, language, canSetFont: false, canSetBackground: false);
+ columnRuler.PropertyChanged += item_PropertyChanged;
+ items.Add(columnRuler);
}
- void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
+ void item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
UpdatePreview();
}
@@ -341,10 +476,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
if (xshd != null) {
var customizationsForCurrentLanguage = customizationList.Where(c => c.Language == null || c.Language == xshd.Name);
CustomizableHighlightingColorizer.ApplyCustomizationsToDefaultElements(textEditor, customizationsForCurrentLanguage);
- ApplyToFolding(textEditor, customizationsForCurrentLanguage);
+ ApplyToRendering(textEditor, customizationsForCurrentLanguage);
var item = (IHighlightingItem)listBox.SelectedItem;
TextView textView = textEditor.TextArea.TextView;
foldingManager.Clear();
+ textMarkerService.RemoveAll(m => true);
+ marker = null;
textView.LineTransformers.Remove(colorizer);
colorizer = null;
if (item != null) {
@@ -355,8 +492,294 @@ namespace ICSharpCode.AvalonEdit.AddIn.Options
textEditor.Select(0, 0);
bracketHighlighter.SetHighlight(null);
item.ShowExample(textEditor.TextArea);
+ if (marker != null) {
+ switch (item.Name) {
+ case ErrorPainter.ErrorColorName:
+ case ErrorPainter.WarningColorName:
+ case ErrorPainter.MessageColorName:
+ marker.MarkerTypes = TextMarkerTypes.SquigglyUnderline;
+ marker.ForegroundColor = item.Foreground;
+ marker.BackgroundColor = item.Background;
+ break;
+ default:
+ marker.MarkerTypes = TextMarkerTypes.None;
+ marker.ForegroundColor = item.Foreground;
+ marker.BackgroundColor = item.Background;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ void ImportButtonClick(object sender, RoutedEventArgs e)
+ {
+ OpenFileDialog dialog = new OpenFileDialog {
+ Filter = @"All known settings|*.vssettings;*.sdsettings|Visual Studio settings (*.vssettings)|*.vssettings|SharpDevelop settings (*.sdsettings)|*.sdsettings",
+ CheckFileExists = true
+ };
+ if (dialog.ShowDialog() != true)
+ return;
+ switch (Path.GetExtension(dialog.FileName).ToUpperInvariant()) {
+ case ".VSSETTINGS":
+ LoadVSSettings(XDocument.Load(dialog.FileName));
+ break;
+ case ".SDSETTINGS":
+ LoadSDSettings(XDocument.Load(dialog.FileName));
+ break;
+ }
+ }
+ #region VSSettings
+ void LoadVSSettings(XDocument document)
+ {
+ XElement[] items;
+ if (!CheckVersionAndFindCategory(document, out items) || items == null) {
+ Core.MessageService.ShowError("Settings version not supported!");
+ return;
+ }
+ bool? replaceCustomizations = null;
+ foreach (var item in items) {
+ string key = item.Attribute("Name").Value;
+ var entry = ParseEntry(item);
+ foreach (var sdKey in mapping[key]) {
+ IHighlightingItem color;
+ if (FindSDColor(sdKey, out color)) {
+ if (color.IsCustomized) {
+ if (!replaceCustomizations.HasValue) {
+ replaceCustomizations =
+ MessageService.AskQuestion("There are already one or more existing customizations. " +
+ "Do you want to replace them with the imported values? " +
+ "Colors that are not yet customized will be imported anyway.");
+ }
+ if (replaceCustomizations == false)
+ continue;
+ }
+ color.Bold = entry.Item3;
+ color.Foreground = entry.Item1;
+ color.Background = entry.Item2;
+ }
+ }
+ }
+ }
+
+ readonly List defaultEntries = new List();
+ IHighlightingItem defaultText;
+
+ bool FindSDColor(string sdKey, out IHighlightingItem item)
+ {
+ string language = null;
+ int dot = sdKey.IndexOf('.');
+ if (dot > 0) {
+ language = sdKey.Substring(0, dot);
+ sdKey = sdKey.Substring(dot + 1);
+ }
+ if ((language == null && languageComboBox.SelectedIndex == 0)
+ || (language == ((XshdSyntaxDefinition)languageComboBox.SelectedItem).Name)) {
+ item = listBox.Items.OfType().FirstOrDefault(i => i.Name == sdKey);
+ } else if (language == null) {
+ item = defaultEntries.FirstOrDefault(i => i.Name == sdKey);
+ } else {
+ var def = allSyntaxDefinitions.FirstOrDefault(d => d.Name == language);
+ var highlighting = HighlightingManager.Instance.GetDefinition(language);
+ item = null;
+ if (def != null && highlighting != null) {
+ var color = def.Elements.OfType().FirstOrDefault(i => i.Name == sdKey);
+ if (color != null) {
+ item = new NamedColorHighlightingItem(defaultText, color) { ParentDefinition = highlighting };
+ item = new CustomizedHighlightingItem(customizationList, item, language);
+ }
}
}
+ return item != null;
+ }
+
+ // VS => SD
+ static readonly MultiDictionary mapping = new MultiDictionary(StringComparer.Ordinal) {
+ { "Brace Matching (Rectangle)", BracketHighlightRenderer.BracketHighlight },
+ { "Collapsible Text", FoldingTextMarkers },
+ { "Comment", "XML.Comment" },
+ { "Comment", "VBNET.Comment" },
+ { "Comment", "C#.Comment" },
+ { "Compiler Error", ErrorPainter.ErrorColorName },
+ { "CSS Comment", "CSS.Comment" },
+ { "CSS Keyword", "" },
+ { "CSS Property Name", "" },
+ { "CSS Property Value", "" },
+ { "CSS Selector", "" },
+ { "CSS String Value", "" },
+ { "Excluded Code", "" },
+ { "HTML Attribute Value", "" },
+ { "HTML Attribute", "" },
+ { "HTML Comment", "" },
+ { "HTML Element Name", "" },
+ { "HTML Entity", "" },
+ { "HTML Operator", "" },
+ { "HTML Server-Side Script", "" },
+ { "HTML Tag Delimiter", "" },
+ { "Identifier", "" },
+ { "Inactive Selected Text", "" },
+ { "Indicator Margin", "" },
+ { "Keyword", "C#.ThisOrBaseReference" },
+ { "Keyword", "C#.NullOrValueKeywords" },
+ { "Keyword", "C#.Keywords" },
+ { "Keyword", "C#.GotoKeywords" },
+ { "Keyword", "C#.ContextKeywords" },
+ { "Keyword", "C#.ExceptionKeywords" },
+ { "Keyword", "C#.CheckedKeyword" },
+ { "Keyword", "C#.UnsafeKeywords" },
+ { "Keyword", "C#.OperatorKeywords" },
+ { "Keyword", "C#.ParameterModifiers" },
+ { "Keyword", "C#.Modifiers" },
+ { "Keyword", "C#.Visibility" },
+ { "Keyword", "C#.NamespaceKeywords" },
+ { "Keyword", "C#.GetSetAddRemove" },
+ { "Keyword", "C#.TrueFalse" },
+ { "Keyword", "C#.TypeKeywords" },
+ { "Keyword", "VBNET.DateLiteral" },
+ { "Keyword", "VBNET.Preprocessor" },
+ { "Keyword", "VBNET.DataTypes" },
+ { "Keyword", "VBNET.Operators" },
+ { "Keyword", "VBNET.Constants" },
+ { "Keyword", "VBNET.Keywords" },
+ { "Keyword", "VBNET.FunctionKeywords" },
+ { "Keyword", "VBNET.ContextKeywords" },
+ { "Line Numbers", CustomizableHighlightingColorizer.LineNumbers },
+ { "MarkerFormatDefinition/HighlightedReference", "" },
+ { "Number", "C#.NumberLiteral" },
+ { "Operator", "C#.Punctuation" },
+ { "outlining.collapsehintadornment", "" },
+ { "outlining.square", FoldingControls },
+ { "outlining.square", FoldingSelectedControls },
+ { "outlining.verticalrule", "" },
+ { "Plain Text", "" },
+ { "Plain Text", CustomizableHighlightingColorizer.DefaultTextAndBackground },
+ { "Preprocessor Keyword", "" },
+ { "Preprocessor Keyword", "C#.Preprocessor" },
+ { "Razor Code", "" },
+ { "Script Comment", "" },
+ { "Script Identifier", "" },
+ { "Script Keyword", "" },
+ { "Script Number", "" },
+ { "Script Operator", "" },
+ { "Script String", "" },
+ { "Selected Text", "" },
+ { "Selected Text", CustomizableHighlightingColorizer.SelectedText },
+ { "String", "VBNET.String" },
+ { "String", "C#.String" },
+ { "String(C# @ Verbatim)", "" },
+ { "Syntax Error", "" },
+ { "urlformat", CustomizableHighlightingColorizer.LinkText },
+ { "User Types", "" },
+ { "User Types(Delegates)", "" },
+ { "User Types(Enums)", "" },
+ { "User Types(Interfaces)", "" },
+ { "User Types(Value types)", "" },
+ { "Warning", ErrorPainter.WarningColorName },
+ { "XAML Attribute Quotes", "" },
+ { "XAML Attribute Value", "" },
+ { "XAML Attribute", "" },
+ { "XAML CData Section", "" },
+ { "XAML Comment", "" },
+ { "XAML Delimiter", "" },
+ { "XAML Markup Extension Class", "" },
+ { "XAML Markup Extension Parameter Name", "" },
+ { "XAML Markup Extension Parameter Value", "" },
+ { "XAML Name", "" },
+ { "XAML Text", "" },
+ { "XML Attribute Quotes", "" },
+ { "XML Attribute Value", "XML." },
+ { "XML Attribute", "" },
+ { "XML CData Section", "" },
+ { "XML Comment", "" },
+ { "XML Delimiter", "" },
+ { "XML Doc Comment", "" },
+ { "XML Doc Tag", "" },
+ { "XML Name", "" },
+ { "XML Text", "" },
+ };
+
+ Tuple ParseEntry(XElement element)
+ {
+ Color fore = Colors.Transparent;
+ Color back = Colors.Transparent;
+ bool isBold = false;
+
+ var attribute = element.Attribute("Foreground");
+ if (attribute != null)
+ fore = ParseColor(attribute.Value);
+ attribute = element.Attribute("Background");
+ if (attribute != null)
+ back = ParseColor(attribute.Value);
+ attribute = element.Attribute("BoldFont");
+ if (attribute != null)
+ isBold = attribute.Value == "Yes";
+
+ return Tuple.Create(fore, back, isBold);
+ }
+
+ Color ParseColor(string s)
+ {
+ if (string.IsNullOrWhiteSpace(s))
+ return Colors.Transparent;
+ if (s.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
+ s = s.Substring(2);
+ if (s.Substring(0, 2) == "02")
+ return Colors.Transparent;
+ try {
+ byte b = byte.Parse(s.Substring(2, 2), NumberStyles.HexNumber);
+ byte g = byte.Parse(s.Substring(4, 2), NumberStyles.HexNumber);
+ byte r = byte.Parse(s.Substring(6, 2), NumberStyles.HexNumber);
+ return Color.FromRgb(r, g, b);
+ } catch (FormatException) {
+ return Colors.Transparent;
+ }
+ }
+
+ bool CheckVersionAndFindCategory(XDocument document, out XElement[] categoryItems)
+ {
+ categoryItems = null;
+ var node = document.Root;
+ var appID = document.Root.Element("ApplicationIdentity");
+ var category = document.Root.Descendants("Category").FirstOrDefault(e => e.Attribute("GUID") != null && e.Attribute("GUID").Value == "{A27B4E24-A735-4D1D-B8E7-9716E1E3D8E0}");
+ if (category != null)
+ categoryItems = category.Descendants("Item").ToArray();
+ if (node.Name != "UserSettings" || appID == null || category == null)
+ return false;
+ return appID.Attribute("version") != null && appID.Attribute("version").Value == "10.0";
+ }
+ #endregion
+
+ #region SDSettings
+ void LoadSDSettings(XDocument document)
+ {
+ var version = document.Root.Attribute("version");
+ if (version != null && version.Value != Properties.FileVersion.ToString()) {
+ Core.MessageService.ShowError("Settings version not supported!");
+ return;
+ }
+ var p = Properties.Load(document.Root);
+ customizationList = p.GetList("CustomizedHighlightingRules").ToList();
+ LanguageComboBox_SelectionChanged(null, null);
+ }
+ #endregion
+
+ void ExportButtonClick(object sender, RoutedEventArgs e)
+ {
+ SaveFileDialog dialog = new SaveFileDialog {
+ Filter = @"SharpDevelop settings (*.sdsettings)|*.sdsettings",
+ };
+ if (dialog.ShowDialog() != true)
+ return;
+ Save(dialog.FileName);
+ }
+
+ void Save(string fileName)
+ {
+ Properties p = new Properties();
+ p.SetList("CustomizedHighlightingRules", customizationList);
+ XElement root = p.Save();
+ root.SetAttributeValue("version", Properties.FileVersion.ToString());
+ new XDocument(root).Save(fileName);
}
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/TextViewOptions.xaml b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/TextViewOptions.xaml
index 7308c0a67f..3e97ec3bb9 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/TextViewOptions.xaml
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Options/TextViewOptions.xaml
@@ -29,5 +29,22 @@
Content="{core:Localize Dialog.Options.IDEOptions.TextEditor.Markers.EnableAnimationsCheckBox}" />
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs
index e81846ba08..4b0b2bc81e 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/TextMarkerService.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Windows;
using System.Windows.Media;
@@ -15,57 +16,29 @@ using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.AvalonEdit.AddIn
{
- ///
- /// Interface the text marker service uses to access the code editor.
- ///
- public interface ICodeEditor
- {
- TextDocument Document { get; }
-
- void Redraw(ISegment segment, DispatcherPriority priority);
-
- event EventHandler DocumentChanged;
- }
-
///
/// Handles the text markers for a code editor.
///
- public sealed class TextMarkerService : DocumentColorizingTransformer, IBackgroundRenderer, ITextMarkerService
+ public sealed class TextMarkerService : DocumentColorizingTransformer, IBackgroundRenderer, ITextMarkerService, ITextViewConnect
{
- readonly ICodeEditor codeEditor;
TextSegmentCollection markers;
+ TextDocument document;
- public TextMarkerService(ICodeEditor codeEditor)
+ public TextMarkerService(TextDocument document)
{
- if (codeEditor == null)
- throw new ArgumentNullException("codeEditor");
- this.codeEditor = codeEditor;
- codeEditor.DocumentChanged += codeEditor_DocumentChanged;
- codeEditor_DocumentChanged(null, null);
+ if (document == null)
+ throw new ArgumentNullException("document");
+ this.document = document;
+ this.markers = new TextSegmentCollection(document);
}
- #region Document Changed - recreate marker collection
- void codeEditor_DocumentChanged(object sender, EventArgs e)
- {
- if (markers != null) {
- foreach (TextMarker m in markers.ToArray()) {
- m.Delete();
- }
- }
- if (codeEditor.Document == null)
- markers = null;
- else
- markers = new TextSegmentCollection(codeEditor.Document);
- }
- #endregion
-
#region ITextMarkerService
public ITextMarker Create(int startOffset, int length)
{
if (markers == null)
throw new InvalidOperationException("Cannot create a marker when not attached to a document");
- int textLength = codeEditor.Document.TextLength;
+ int textLength = document.TextLength;
if (startOffset < 0 || startOffset > textLength)
throw new ArgumentOutOfRangeException("startOffset", startOffset, "Value must be between 0 and " + textLength);
if (length < 0 || startOffset + length > textLength)
@@ -117,7 +90,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
///
internal void Redraw(ISegment segment)
{
- codeEditor.Redraw(segment, DispatcherPriority.Normal);
+ foreach (var view in textViews) {
+ view.Redraw(segment, DispatcherPriority.Normal);
+ }
if (RedrawRequested != null)
RedrawRequested(this, EventArgs.Empty);
}
@@ -223,6 +198,26 @@ namespace ICSharpCode.AvalonEdit.AddIn
yield return new Point(start.X + i * offset, start.Y - ((i + 1) % 2 == 0 ? offset : 0));
}
#endregion
+
+ #region ITextViewConnect
+ readonly List textViews = new List();
+
+ void ITextViewConnect.AddToTextView(TextView textView)
+ {
+ if (textView != null && !textViews.Contains(textView)) {
+ Debug.Assert(textView.Document == document);
+ textViews.Add(textView);
+ }
+ }
+
+ void ITextViewConnect.RemoveFromTextView(TextView textView)
+ {
+ if (textView != null) {
+ Debug.Assert(textView.Document == document);
+ textViews.Remove(textView);
+ }
+ }
+ #endregion
}
public sealed class TextMarker : TextSegment, ITextMarker
diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs
index 1a62dcee99..8d2c8dbd33 100644
--- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs
+++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/EntityModelCodeGenerator.cs
@@ -1,51 +1,67 @@
-#region Usings
-
-using System;
+using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using ICSharpCode.SharpDevelop.Project;
using System.Data.Entity.Design;
-using System.CodeDom;
using System.Data.Metadata.Edm;
-using System.Xml.Linq;
using System.IO;
+using System.Xml.Linq;
-#endregion
+using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.Data.EDMDesigner.Core.IO
{
- public class EntityModelCodeGenerator : IO, ICustomTool
- {
- #region ICustomTool Member
-
- public void GenerateCode(FileProjectItem item, CustomToolContext context)
- {
- LanguageOption languageToGenerateCode = LanguageOption.GenerateCSharpCode;
-
- if (item.Project.Language != "C#")
- languageToGenerateCode = LanguageOption.GenerateVBCode;
-
- XDocument edmxDocument = XDocument.Load(item.FileName);
- XElement conceptualModelsElement = EDMXIO.ReadSection(edmxDocument, EDMXIO.EDMXSection.CSDL);
-
- if (conceptualModelsElement == null)
- throw new ArgumentException("Input file is not a valid EDMX file.");
-
- XDocument csdlDocument = new XDocument(new XDeclaration("1.0", "utf-8", null), conceptualModelsElement.Element(XName.Get("Schema", csdlNamespace.NamespaceName)));
-
- string tempFileName = IO.GetTempFilenameWithExtension("csdl");
- csdlDocument.Save(tempFileName);
+ public class EntityModelCodeGenerator : IO, ICustomTool
+ {
+ public void GenerateCode(FileProjectItem item, CustomToolContext context)
+ {
+ XElement schema = GetModelSchema(item);
+ XDocument csdlDocument = CreateCsdlDocument(schema);
+
+ string tempFileName = IO.GetTempFilenameWithExtension("csdl");
+ csdlDocument.Save(tempFileName);
- string outputFileName = context.GetOutputFileName(item, "Designer");
+ LanguageOption languageToGenerateCode = GetLanguageOption(item);
+ string outputFileName = context.GetOutputFileName(item, "Designer");
- EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode);
- IList edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName);
- File.Delete(tempFileName);
-
- context.EnsureOutputFileIsInProject(item, outputFileName);
- }
+ EntityCodeGenerator entityCodeGenerator = new EntityCodeGenerator(languageToGenerateCode);
+ AddNamespaceMapping(entityCodeGenerator, schema, context.OutputNamespace);
+ IList edmSchemaErrors = entityCodeGenerator.GenerateCode(tempFileName, outputFileName);
+ File.Delete(tempFileName);
+
+ context.EnsureOutputFileIsInProject(item, outputFileName);
+ }
+
+ XElement GetModelSchema(FileProjectItem item)
+ {
+ XDocument edmxDocument = XDocument.Load(item.FileName);
+ XElement conceptualModelsElement = EDMXIO.ReadSection(edmxDocument, EDMXIO.EDMXSection.CSDL);
+ if (conceptualModelsElement == null)
+ throw new ArgumentException("Input file is not a valid EDMX file.");
- #endregion
- }
+ return conceptualModelsElement.Element(XName.Get("Schema", csdlNamespace.NamespaceName));
+ }
+
+ XDocument CreateCsdlDocument(XElement schema)
+ {
+ return new XDocument(new XDeclaration("1.0", "utf-8", null), schema);
+ }
+
+ LanguageOption GetLanguageOption(FileProjectItem item)
+ {
+ if (item.Project.Language != "C#")
+ return LanguageOption.GenerateVBCode;
+ return LanguageOption.GenerateCSharpCode;
+ }
+
+ void AddNamespaceMapping(EntityCodeGenerator entityCodeGenerator, XElement schema, string outputNamespace)
+ {
+ if (!String.IsNullOrEmpty(outputNamespace))
+ AddNamespaceMapping(entityCodeGenerator, schema.Attribute(XName.Get("Namespace")), outputNamespace);
+ }
+
+ void AddNamespaceMapping(EntityCodeGenerator entityCodeGenerator, XAttribute edmNamespace, string outputNamespace)
+ {
+ if (edmNamespace != null)
+ entityCodeGenerator.EdmToObjectNamespaceMap.Add(edmNamespace.Value, outputNamespace);
+ }
+ }
}
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
index 9a9c4214f8..6c60742d5b 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
@@ -317,7 +317,7 @@ namespace ICSharpCode.FormsDesigner
/// code that is not supported in a previous version of .NET. (3.5 and below)
/// Currently it fixes:
/// - remove calls to ISupportInitialize.BeginInit/EndInit, if the interface is not implemented by the type in the target framework.
- ///
+ ///
/// When adding new workarounds make sure that the code does not remove too much code!
void RemoveUnsupportedCode(CodeTypeDeclaration formClass, CodeMemberMethod initializeComponent)
{
@@ -339,16 +339,9 @@ namespace ICSharpCode.FormsDesigner
CodeMethodInvokeExpression invocation = (CodeMethodInvokeExpression)stmt.Expression;
CodeCastExpression expr = invocation.Method.TargetObject as CodeCastExpression;
if (expr != null) {
- CodeFieldReferenceExpression fieldRef = expr.Expression as CodeFieldReferenceExpression;
- if (fieldRef == null || !(fieldRef.TargetObject is CodeThisReferenceExpression))
- continue;
if (expr.TargetType.BaseType != "System.ComponentModel.ISupportInitialize")
continue;
- IField field = this.formClass.DefaultReturnType.GetFields()
- .First(f => this.formClass.ProjectContent.Language.NameComparer.Equals(fieldRef.FieldName, f.Name));
- if (field.ReturnType == null)
- continue;
- IClass fieldType = field.ReturnType.GetUnderlyingClass();
+ var fieldType = GetTypeOfControl(expr.Expression, initializeComponent, formClass);
if (fieldType == null)
continue;
if (!fieldType.IsTypeInInheritanceTree(iSupportInitializeInterface))
@@ -361,6 +354,31 @@ namespace ICSharpCode.FormsDesigner
}
}
+ ///
+ /// Tries to find the type of the expression.
+ ///
+ IClass GetTypeOfControl(CodeExpression expression, CodeMemberMethod initializeComponentMethod, CodeTypeDeclaration formTypeDeclaration)
+ {
+ StringComparer comparer = formClass.ProjectContent.Language.NameComparer;
+ if (expression is CodeVariableReferenceExpression) {
+ string name = ((CodeVariableReferenceExpression)expression).VariableName;
+ var decl = initializeComponentMethod.Statements.OfType().Single(v => comparer.Equals(v.Name, name));
+ return formClass.ProjectContent.GetClass(decl.Type.BaseType, 0);
+ }
+ if (expression is CodeFieldReferenceExpression && ((CodeFieldReferenceExpression)expression).TargetObject is CodeThisReferenceExpression) {
+ string name = ((CodeFieldReferenceExpression)expression).FieldName;
+ var decl = formTypeDeclaration.Members.OfType().FirstOrDefault(f => comparer.Equals(name, f.Name));
+ if (decl != null)
+ return formClass.ProjectContent.GetClass(decl.Type.BaseType, 0);
+ var field = formClass.DefaultReturnType.GetFields()
+ .First(f => comparer.Equals(f.Name, name));
+ if (field.ReturnType == null)
+ return null;
+ return field.ReturnType.GetUnderlyingClass();
+ }
+ return null;
+ }
+
///
/// Compares the SharpDevelop.Dom field declaration oldField to
/// the CodeDom field declaration newField.
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
index 29ea7692cc..d4218544ce 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
@@ -159,6 +159,9 @@ namespace ICSharpCode.FormsDesigner
{
LoggingService.Debug("Forms designer: Load " + file.FileName + "; inMasterLoadOperation=" + this.inMasterLoadOperation);
+ if (this.typeResolutionService != null)
+ this.typeResolutionService.ClearCaches();
+
if (inMasterLoadOperation) {
if (this.sourceCodeStorage.ContainsFile(file)) {
diff --git a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs
index 3b484f99e6..837e3757f0 100644
--- a/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs
+++ b/src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs
@@ -361,6 +361,19 @@ namespace ICSharpCode.FormsDesigner.Services
return GetType(name, throwOnError, false);
}
+ #if DEBUG
+ int count = 0;
+ #endif
+
+ Dictionary typeCache = new Dictionary(StringComparer.Ordinal);
+ Dictionary typeCacheIgnoreCase = new Dictionary(StringComparer.OrdinalIgnoreCase);
+
+ public void ClearCaches()
+ {
+ typeCacheIgnoreCase.Clear();
+ typeCache.Clear();
+ }
+
public Type GetType(string name, bool throwOnError, bool ignoreCase)
{
if (name == null || name.Length == 0) {
@@ -369,9 +382,19 @@ namespace ICSharpCode.FormsDesigner.Services
if (IgnoreType(name)) {
return null;
}
+ if (ignoreCase) {
+ Type cachedType;
+ if (typeCacheIgnoreCase.TryGetValue(name, out cachedType))
+ return cachedType;
+ } else {
+ Type cachedType;
+ if (typeCache.TryGetValue(name, out cachedType))
+ return cachedType;
+ }
#if DEBUG
if (!name.StartsWith("System.")) {
- LoggingService.Debug("TypeResolutionService: Looking for " + name);
+ count++;
+ LoggingService.Debug(count + " TypeResolutionService: Looking for " + name);
}
#endif
try {
@@ -436,6 +459,7 @@ namespace ICSharpCode.FormsDesigner.Services
try {
Type t = asm.GetType(name, false);
if (t != null) {
+ AddToCache(name, t, ignoreCase);
return t;
}
} catch (FileNotFoundException) {
@@ -449,7 +473,7 @@ namespace ICSharpCode.FormsDesigner.Services
if (throwOnError && type == null)
throw new TypeLoadException(name + " not found by TypeResolutionService");
-
+ AddToCache(name, type, ignoreCase);
return type;
} catch (Exception e) {
LoggingService.Error(e);
@@ -457,6 +481,17 @@ namespace ICSharpCode.FormsDesigner.Services
return null;
}
+ void AddToCache(string name, Type type, bool ignoreCase)
+ {
+ if (type == null)
+ return;
+ if (ignoreCase) {
+ typeCacheIgnoreCase.Add(name, type);
+ } else {
+ typeCache.Add(name, type);
+ }
+ }
+
public void ReferenceAssembly(AssemblyName name)
{
ICSharpCode.Core.LoggingService.Warn("TODO: Add Assembly reference : " + name);
diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/CodeView.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/CodeView.cs
index 2c8534419c..aab1ac03d0 100644
--- a/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/CodeView.cs
+++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/CodeView.cs
@@ -36,7 +36,7 @@ namespace ICSharpCode.ILSpyAddIn.ViewContent
///
/// Equivalent to AE.AddIn CodeEditor, but without editing capabilities.
///
- class CodeView : Grid, IDisposable, ICodeEditor, IPositionable
+ class CodeView : Grid, IDisposable, IPositionable
{
public event EventHandler DocumentChanged;
@@ -59,7 +59,7 @@ namespace ICSharpCode.ILSpyAddIn.ViewContent
this.adapter.TextEditor.TextArea.TextView.VisualLinesChanged += delegate { iconMargin.InvalidateVisual(); };
// add marker service
- this.textMarkerService = new TextMarkerService(this);
+ this.textMarkerService = new TextMarkerService(adapter.TextEditor.Document);
this.adapter.TextEditor.TextArea.TextView.BackgroundRenderers.Add(textMarkerService);
this.adapter.TextEditor.TextArea.TextView.LineTransformers.Add(textMarkerService);
this.adapter.TextEditor.TextArea.TextView.Services.AddService(typeof(ITextMarkerService), textMarkerService);
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs
index 7914efbefa..44952fcbca 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs
@@ -60,6 +60,7 @@ namespace ICSharpCode.WpfDesign.AddIn
protected override void LoadInternal(OpenedFile file, System.IO.Stream stream)
{
+ wasChangedInDesigner = false;
Debug.Assert(file == this.PrimaryFile);
_stream = new MemoryStream();
@@ -108,10 +109,11 @@ namespace ICSharpCode.WpfDesign.AddIn
}
private MemoryStream _stream;
+ bool wasChangedInDesigner;
protected override void SaveInternal(OpenedFile file, System.IO.Stream stream)
{
- if (IsDirty && designer.DesignContext != null) {
+ if (wasChangedInDesigner && designer.DesignContext != null) {
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = EditorControlService.GlobalOptions.IndentationString;
@@ -120,12 +122,10 @@ namespace ICSharpCode.WpfDesign.AddIn
designer.SaveDesigner(xmlWriter);
}
} else {
- if (_stream.CanRead) {
- _stream.Position = 0;
- using (var reader = new StreamReader(_stream)) {
- using (var writer = new StreamWriter(stream)) {
- writer.Write(reader.ReadToEnd());
- }
+ _stream.Position = 0;
+ using (var reader = new StreamReader(new UnclosableStream(_stream))) {
+ using (var writer = new StreamWriter(stream)) {
+ writer.Write(reader.ReadToEnd());
}
}
}
@@ -153,6 +153,7 @@ namespace ICSharpCode.WpfDesign.AddIn
void OnUndoStackChanged(object sender, EventArgs e)
{
+ wasChangedInDesigner = true;
this.PrimaryFile.MakeDirty();
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SelectedElementRectangleExtension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SelectedElementRectangleExtension.cs
index aedc0809d3..8d6a4643b5 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SelectedElementRectangleExtension.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SelectedElementRectangleExtension.cs
@@ -23,18 +23,18 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
public SelectedElementRectangleExtension()
{
Rectangle selectionRect = new Rectangle();
- selectionRect.SnapsToDevicePixels = true;
- selectionRect.Stroke = new SolidColorBrush(Color.FromRgb(0x47, 0x47, 0x47));
- selectionRect.StrokeThickness = 1.5;
- selectionRect.IsHitTestVisible = false;
+ selectionRect.SnapsToDevicePixels = true;
+ selectionRect.Stroke = new SolidColorBrush(Color.FromRgb(0x47, 0x47, 0x47));
+ selectionRect.StrokeThickness = 1.5;
+ selectionRect.IsHitTestVisible = false;
- RelativePlacement placement = new RelativePlacement(HorizontalAlignment.Stretch, VerticalAlignment.Stretch);
- placement.XOffset = -1;
- placement.YOffset = -1;
- placement.WidthOffset = 2;
- placement.HeightOffset = 2;
+ RelativePlacement placement = new RelativePlacement(HorizontalAlignment.Stretch, VerticalAlignment.Stretch);
+ placement.XOffset = -1;
+ placement.YOffset = -1;
+ placement.WidthOffset = 2;
+ placement.HeightOffset = 2;
- this.AddAdorners(placement, selectionRect);
+ this.AddAdorners(placement, selectionRect);
}
}
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SizeDisplayExtension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SizeDisplayExtension.cs
index 25c59064a0..4ebe80bfb7 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SizeDisplayExtension.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SizeDisplayExtension.cs
@@ -17,40 +17,40 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
///
/// Display Height/Width on the primary selection
///
- [ExtensionFor(typeof(UIElement))]
- class SizeDisplayExtension : PrimarySelectionAdornerProvider
- {
- HeightDisplay _heightDisplay;
- WidthDisplay _widthDisplay;
-
- public HeightDisplay HeightDisplay{
- get { return _heightDisplay; }
- }
-
- public WidthDisplay WidthDisplay{
- get { return _widthDisplay; }
- }
-
- protected override void OnInitialized()
- {
- base.OnInitialized();
- if (this.ExtendedItem != null)
- {
- RelativePlacement placementHeight = new RelativePlacement(HorizontalAlignment.Right, VerticalAlignment.Stretch);
- placementHeight.XOffset = 10;
- _heightDisplay = new HeightDisplay();
- _heightDisplay.DataContext = this.ExtendedItem.Component;
+ [ExtensionFor(typeof(UIElement))]
+ class SizeDisplayExtension : PrimarySelectionAdornerProvider
+ {
+ HeightDisplay _heightDisplay;
+ WidthDisplay _widthDisplay;
+
+ public HeightDisplay HeightDisplay{
+ get { return _heightDisplay; }
+ }
+
+ public WidthDisplay WidthDisplay{
+ get { return _widthDisplay; }
+ }
+
+ protected override void OnInitialized()
+ {
+ base.OnInitialized();
+ if (this.ExtendedItem != null)
+ {
+ RelativePlacement placementHeight = new RelativePlacement(HorizontalAlignment.Right, VerticalAlignment.Stretch);
+ placementHeight.XOffset = 10;
+ _heightDisplay = new HeightDisplay();
+ _heightDisplay.DataContext = this.ExtendedItem.Component;
- RelativePlacement placementWidth = new RelativePlacement(HorizontalAlignment.Stretch, VerticalAlignment.Bottom);
- placementWidth.YOffset = 10;
- _widthDisplay = new WidthDisplay();
- _widthDisplay.DataContext = this.ExtendedItem.Component;
+ RelativePlacement placementWidth = new RelativePlacement(HorizontalAlignment.Stretch, VerticalAlignment.Bottom);
+ placementWidth.YOffset = 10;
+ _widthDisplay = new WidthDisplay();
+ _widthDisplay.DataContext = this.ExtendedItem.Component;
- this.AddAdorners(placementHeight, _heightDisplay);
- this.AddAdorners(placementWidth, _widthDisplay);
- _heightDisplay.Visibility=Visibility.Hidden;
- _widthDisplay.Visibility=Visibility.Hidden;
- }
- }
- }
+ this.AddAdorners(placementHeight, _heightDisplay);
+ this.AddAdorners(placementWidth, _widthDisplay);
+ _heightDisplay.Visibility=Visibility.Hidden;
+ _widthDisplay.Visibility=Visibility.Hidden;
+ }
+ }
+ }
}
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs
index acd92c6e0a..88f5094d0d 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/StackPanelPlacementSupport.cs
@@ -18,156 +18,157 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
/// Provides for .
///
[ExtensionFor(typeof (StackPanel), OverrideExtension = typeof (DefaultPlacementBehavior))]
- public class StackPanelPlacementSupport : DefaultPlacementBehavior
- {
- private StackPanel _stackPanel;
- private AdornerPanel _adornerPanel;
- private Rectangle _rectangle = new Rectangle(); // Draws a rectangle to indicate the position of insertion.
- private readonly List _rects = new List(); // Contains the Rect of all the children of StackPanel.
-
-
- private bool _isItemGettingResized; // Indicates whether any children is getting resized.
- private int _indexToInsert; // Postion where to insert the element.
+ public class StackPanelPlacementSupport : DefaultPlacementBehavior
+ {
+ private StackPanel _stackPanel;
+ private AdornerPanel _adornerPanel;
+ private Rectangle _rectangle = new Rectangle(); // Draws a rectangle to indicate the position of insertion.
+ private readonly List _rects = new List(); // Contains the Rect of all the children of StackPanel.
+
+
+ private bool _isItemGettingResized; // Indicates whether any children is getting resized.
+ private int _indexToInsert; // Postion where to insert the element.
- protected override void OnInitialized()
- {
- base.OnInitialized();
- _stackPanel = this.ExtendedItem.View as StackPanel;
- var children = this.ExtendedItem.ContentProperty.CollectionElements;
- foreach (var child in children) {
- Point p = child.View.TranslatePoint(new Point(0, 0), this.ExtendedItem.View);
- _rects.Add(new Rect(p, child.View.RenderSize));
- }
- }
+ protected override void OnInitialized()
+ {
+ base.OnInitialized();
+ _stackPanel = this.ExtendedItem.View as StackPanel;
+ var children = this.ExtendedItem.ContentProperty.CollectionElements;
+ foreach (var child in children) {
+ Point p = child.View.TranslatePoint(new Point(0, 0), this.ExtendedItem.View);
+ _rects.Add(new Rect(p, child.View.RenderSize));
+ }
+ }
- public override void BeginPlacement(PlacementOperation operation)
- {
- base.BeginPlacement(operation);
- if (_rects.Count > 0)
- _rects.Clear();
-
- /* Add Rect of all children to _rects */
- var children = this.ExtendedItem.ContentProperty.CollectionElements;
- foreach (var child in children) {
- Point p = child.View.TranslatePoint(new Point(0, 0), this.ExtendedItem.View);
- _rects.Add(new Rect(p, child.View.RenderSize));
- }
- if (_adornerPanel != null && this.ExtendedItem.Services.DesignPanel.Adorners.Contains(_adornerPanel))
- this.ExtendedItem.Services.DesignPanel.Adorners.Remove(_adornerPanel);
-
- /* Place the Rectangle */
- _adornerPanel = new AdornerPanel();
- _rectangle = new Rectangle();
- _adornerPanel.SetAdornedElement(this.ExtendedItem.View, this.ExtendedItem);
- _adornerPanel.Children.Add(_rectangle);
- this.ExtendedItem.Services.DesignPanel.Adorners.Add(_adornerPanel);
- }
+ public override void BeginPlacement(PlacementOperation operation)
+ {
+ base.BeginPlacement(operation);
+ if (_rects.Count > 0)
+ _rects.Clear();
+
+ /* Add Rect of all children to _rects */
+ var children = this.ExtendedItem.ContentProperty.CollectionElements;
+ foreach (var child in children) {
+ Point p = child.View.TranslatePoint(new Point(0, 0), this.ExtendedItem.View);
+ _rects.Add(new Rect(p, child.View.RenderSize));
+ }
+ if (_adornerPanel != null && this.ExtendedItem.Services.DesignPanel.Adorners.Contains(_adornerPanel))
+ this.ExtendedItem.Services.DesignPanel.Adorners.Remove(_adornerPanel);
+
+ /* Place the Rectangle */
+ _adornerPanel = new AdornerPanel();
+ _rectangle = new Rectangle();
+ _adornerPanel.SetAdornedElement(this.ExtendedItem.View, this.ExtendedItem);
+ _adornerPanel.Children.Add(_rectangle);
+ this.ExtendedItem.Services.DesignPanel.Adorners.Add(_adornerPanel);
+ }
- public override void EndPlacement(PlacementOperation operation)
- {
- base.EndPlacement(operation);
- if (_adornerPanel != null && this.ExtendedItem.Services.DesignPanel.Adorners.Contains(_adornerPanel))
- this.ExtendedItem.Services.DesignPanel.Adorners.Remove(_adornerPanel);
- }
+ public override void EndPlacement(PlacementOperation operation)
+ {
+ base.EndPlacement(operation);
+ if (_adornerPanel != null && this.ExtendedItem.Services.DesignPanel.Adorners.Contains(_adornerPanel))
+ this.ExtendedItem.Services.DesignPanel.Adorners.Remove(_adornerPanel);
+ }
- public override void EnterContainer(PlacementOperation operation)
- {
- base.EnterContainer(operation);
- foreach (var info in operation.PlacedItems) {
- info.Item.Properties[FrameworkElement.MarginProperty].Reset();
- info.Item.Properties[FrameworkElement.HorizontalAlignmentProperty].Reset();
- info.Item.Properties[FrameworkElement.VerticalAlignmentProperty].Reset();
- }
- _rectangle.Visibility = Visibility.Visible;
- }
+ public override void EnterContainer(PlacementOperation operation)
+ {
+ base.EnterContainer(operation);
+ foreach (var info in operation.PlacedItems) {
+ info.Item.Properties[FrameworkElement.MarginProperty].Reset();
+ info.Item.Properties[FrameworkElement.HorizontalAlignmentProperty].Reset();
+ info.Item.Properties[FrameworkElement.VerticalAlignmentProperty].Reset();
+ }
+ _rectangle.Visibility = Visibility.Visible;
+ }
- public override void LeaveContainer(PlacementOperation operation)
- {
- base.LeaveContainer(operation);
- /* Hide the rectangle in case switching to the other container
- * otherwise it will show up intersecting with the container */
- _rectangle.Visibility = Visibility.Hidden;
- }
+ public override void LeaveContainer(PlacementOperation operation)
+ {
+ base.LeaveContainer(operation);
+ /* Hide the rectangle in case switching to the other container
+ * otherwise it will show up intersecting with the container */
+ _rectangle.Visibility = Visibility.Hidden;
+ }
- public override void SetPosition(PlacementInformation info)
- {
- base.SetPosition(info);
+ public override void SetPosition(PlacementInformation info)
+ {
+ base.SetPosition(info);
- var resizeExtensions = info.Item.Extensions.OfType();
- if (resizeExtensions != null && resizeExtensions.Count() != 0) {
- var resizeExtension = resizeExtensions.First();
- _isItemGettingResized = resizeExtension.IsResizing;
- }
+ var resizeExtensions = info.Item.Extensions.OfType();
+ if (resizeExtensions != null && resizeExtensions.Count() != 0) {
+ var resizeExtension = resizeExtensions.First();
+ _isItemGettingResized = resizeExtension.IsResizing;
+ }
- if (_stackPanel != null && !_isItemGettingResized) {
- if (_stackPanel.Orientation == Orientation.Vertical) {
- var offset = FindHorizontalRectanglePlacementOffset(info.Bounds);
- DrawHorizontalRectangle(offset);
- } else {
- var offset = FindVerticalRectanglePlacementOffset(info.Bounds);
- DrawVerticalRectangle(offset);
- }
+ if (_stackPanel != null && !_isItemGettingResized) {
+ if (_stackPanel.Orientation == Orientation.Vertical) {
+ var offset = FindHorizontalRectanglePlacementOffset(info.Bounds);
+ DrawHorizontalRectangle(offset);
+ } else {
+ var offset = FindVerticalRectanglePlacementOffset(info.Bounds);
+ DrawVerticalRectangle(offset);
+ }
- ChangePostionTo(info.Item.View, _indexToInsert);
- }
- }
+ ChangePositionTo(info.Item, _indexToInsert);
+ }
+ }
- private void ChangePostionTo(UIElement element, int index)
- {
- int elementIndex = 0;
- if (_stackPanel.Children.Contains(element))
- elementIndex = _stackPanel.Children.IndexOf(element);
- if (index > elementIndex)
- index--;
- _stackPanel.Children.Remove(element);
- _stackPanel.Children.Insert(index, element);
- }
-
- private double FindHorizontalRectanglePlacementOffset(Rect rect)
- {
- _rects.Sort((r1, r2) => r1.Top.CompareTo(r2.Top));
- var itemCenter = (rect.Top + rect.Bottom)/2;
- for (int i = 0; i < _rects.Count; i++) {
- var rectCenter = (_rects[i].Top + _rects[i].Bottom)/2;
- if (rectCenter >= itemCenter) {
- _indexToInsert = i;
- return _rects[i].Top;
- }
- }
- _indexToInsert = _rects.Count;
- return _rects.Count > 0 ? _rects.Last().Bottom : 0;
- }
-
- private double FindVerticalRectanglePlacementOffset(Rect rect)
- {
- _rects.Sort((r1, r2) => r1.Left.CompareTo(r2.Left));
- var itemCenter = (rect.Left + rect.Right)/2;
- for (int i = 0; i < _rects.Count; i++) {
- var rectCenter = (_rects[i].Left + _rects[i].Top)/2;
- if (rectCenter >= itemCenter) {
- _indexToInsert = i;
- return _rects[i].Left;
- }
- }
- _indexToInsert = _rects.Count;
- return _rects.Count > 0 ? _rects.Last().Right : 0;
- }
-
- private void DrawHorizontalRectangle(double offset)
- {
- _rectangle.Height = 2;
- _rectangle.Fill = Brushes.Black;
- var placement = new RelativePlacement(HorizontalAlignment.Stretch, VerticalAlignment.Top) {YOffset = offset};
- AdornerPanel.SetPlacement(_rectangle, placement);
- }
-
- private void DrawVerticalRectangle(double offset)
- {
- _rectangle.Width = 2;
- _rectangle.Fill = Brushes.Black;
- var placement = new RelativePlacement(HorizontalAlignment.Left, VerticalAlignment.Stretch) {XOffset = offset};
- AdornerPanel.SetPlacement(_rectangle, placement);
- }
- }
+ private void ChangePositionTo(DesignItem element, int index)
+ {
+ if (this.ExtendedItem.ContentProperty == null || !this.ExtendedItem.ContentProperty.IsCollection)
+ return;
+ var elements = this.ExtendedItem.ContentProperty.CollectionElements;
+ int elementIndex = elements.IndexOf(element);
+ if (elementIndex >= 0 && index > elementIndex)
+ index--;
+ elements.Remove(element);
+ elements.Insert(index, element);
+ }
+
+ private double FindHorizontalRectanglePlacementOffset(Rect rect)
+ {
+ _rects.Sort((r1, r2) => r1.Top.CompareTo(r2.Top));
+ var itemCenter = (rect.Top + rect.Bottom)/2;
+ for (int i = 0; i < _rects.Count; i++) {
+ var rectCenter = (_rects[i].Top + _rects[i].Bottom)/2;
+ if (rectCenter >= itemCenter) {
+ _indexToInsert = i;
+ return _rects[i].Top;
+ }
+ }
+ _indexToInsert = _rects.Count;
+ return _rects.Count > 0 ? _rects.Last().Bottom : 0;
+ }
+
+ private double FindVerticalRectanglePlacementOffset(Rect rect)
+ {
+ _rects.Sort((r1, r2) => r1.Left.CompareTo(r2.Left));
+ var itemCenter = (rect.Left + rect.Right)/2;
+ for (int i = 0; i < _rects.Count; i++) {
+ var rectCenter = (_rects[i].Left + _rects[i].Top)/2;
+ if (rectCenter >= itemCenter) {
+ _indexToInsert = i;
+ return _rects[i].Left;
+ }
+ }
+ _indexToInsert = _rects.Count;
+ return _rects.Count > 0 ? _rects.Last().Right : 0;
+ }
+
+ private void DrawHorizontalRectangle(double offset)
+ {
+ _rectangle.Height = 2;
+ _rectangle.Fill = Brushes.Black;
+ var placement = new RelativePlacement(HorizontalAlignment.Stretch, VerticalAlignment.Top) {YOffset = offset};
+ AdornerPanel.SetPlacement(_rectangle, placement);
+ }
+
+ private void DrawVerticalRectangle(double offset)
+ {
+ _rectangle.Width = 2;
+ _rectangle.Fill = Brushes.Black;
+ var placement = new RelativePlacement(HorizontalAlignment.Left, VerticalAlignment.Stretch) {XOffset = offset};
+ AdornerPanel.SetPlacement(_rectangle, placement);
+ }
+ }
}
diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableDataManagerFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableDataManagerFixture.cs
index daab1ec216..0e30a33341 100644
--- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableDataManagerFixture.cs
+++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/DataManager/TableStragy/TableDataManagerFixture.cs
@@ -320,8 +320,8 @@ namespace ICSharpCode.Reports.Core.Test.DataManager.TableStrategy
{
if (this.table != null) {
- this.table = null;
this.table.Dispose();
+ this.table = null;
}
}
diff --git a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs
index 19a229c839..e3ca3e4a51 100644
--- a/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs
+++ b/src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/Test/ICSharpCode.Reports.Core.Test/ReportingLanguage/IntegrationTests/AggregateFunctionsFixture.cs
@@ -15,7 +15,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
{
[TestFixture]
-// [SetCulture("de-DE")]
+ [SetCulture("en-US")]
public class AggregateFunctionsFromTableFixture
{
@@ -107,7 +107,7 @@ namespace ICSharpCode.Reports.Core.Test.ReportingLanguage.IntegrationTests
const string expression = "=max(amount)";
//var s = this.evaluator.Evaluate(expression);
Assert.That(this.evaluator.Evaluate(expression),
- Is.EqualTo("400,5"));
+ Is.EqualTo("400.5"));
}
diff --git a/src/AddIns/Misc/SharpRefactoring/Test/MockTextEditor.cs b/src/AddIns/Misc/SharpRefactoring/Test/MockTextEditor.cs
index a58ddf5414..d730583c68 100644
--- a/src/AddIns/Misc/SharpRefactoring/Test/MockTextEditor.cs
+++ b/src/AddIns/Misc/SharpRefactoring/Test/MockTextEditor.cs
@@ -32,7 +32,7 @@ namespace SharpRefactoring.Tests
pc = new DefaultProjectContent();
pc.ReferencedContents.Add(AssemblyParserService.DefaultProjectContentRegistry.Mscorlib);
- this.TextEditor.TextArea.TextView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(this.TextEditor));
+// this.TextEditor.TextArea.TextView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(this.TextEditor));
this.TextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
}
diff --git a/src/AddIns/VersionControl/SubversionAddIn/Src/Gui/ProjectBrowserVisitor/OverlayIconManager.cs b/src/AddIns/VersionControl/SubversionAddIn/Src/Gui/ProjectBrowserVisitor/OverlayIconManager.cs
index c44eee54f2..b45e19fd3b 100644
--- a/src/AddIns/VersionControl/SubversionAddIn/Src/Gui/ProjectBrowserVisitor/OverlayIconManager.cs
+++ b/src/AddIns/VersionControl/SubversionAddIn/Src/Gui/ProjectBrowserVisitor/OverlayIconManager.cs
@@ -192,7 +192,12 @@ namespace ICSharpCode.Svn
}
}
- return client.SingleStatus(fileName).TextStatus;
+ try {
+ return client.SingleStatus(fileName).TextStatus;
+ } catch (SvnClientException ex) {
+ LoggingService.Warn(ex);
+ return StatusKind.None;
+ }
}
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs
index 934c546210..7ac241efb6 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/ImeSupport.cs
@@ -51,6 +51,7 @@ namespace ICSharpCode.AvalonEdit.Editing
if (textArea != null) {
textArea.GotKeyboardFocus -= TextAreaGotKeyboardFocus;
textArea.LostKeyboardFocus -= TextAreaLostKeyboardFocus;
+ textArea.OptionChanged -= TextAreaOptionChanged;
textArea = null;
}
ClearContext();
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingMargin.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingMargin.cs
index f5466e8f12..e9945b3ab5 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingMargin.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Folding/FoldingMargin.cs
@@ -3,12 +3,12 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.TextFormatting;
-
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.AvalonEdit.Utils;
@@ -92,10 +92,16 @@ namespace ICSharpCode.AvalonEdit.Folding
static void OnUpdateBrushes(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
+ FoldingMargin m = null;
+ if (d is FoldingMargin)
+ m = (FoldingMargin)d;
+ else if (d is TextEditor)
+ m = ((TextEditor)d).TextArea.LeftMargins.FirstOrDefault(c => c is FoldingMargin) as FoldingMargin;
+ if (m == null) return;
if (e.Property.Name == FoldingMarkerBrushProperty.Name)
- foldingControlPen = MakeFrozenPen((Brush)e.NewValue);
+ m.foldingControlPen = MakeFrozenPen((Brush)e.NewValue);
if (e.Property.Name == SelectedFoldingMarkerBrushProperty.Name)
- selectedFoldingControlPen = MakeFrozenPen((Brush)e.NewValue);
+ m.selectedFoldingControlPen = MakeFrozenPen((Brush)e.NewValue);
}
#endregion
@@ -181,8 +187,8 @@ namespace ICSharpCode.AvalonEdit.Folding
return markers[index];
}
- static Pen foldingControlPen = MakeFrozenPen((Brush)FoldingMarkerBrushProperty.DefaultMetadata.DefaultValue);
- static Pen selectedFoldingControlPen = MakeFrozenPen((Brush)SelectedFoldingMarkerBrushProperty.DefaultMetadata.DefaultValue);
+ Pen foldingControlPen = MakeFrozenPen((Brush)FoldingMarkerBrushProperty.DefaultMetadata.DefaultValue);
+ Pen selectedFoldingControlPen = MakeFrozenPen((Brush)SelectedFoldingMarkerBrushProperty.DefaultMetadata.DefaultValue);
static Pen MakeFrozenPen(Brush brush)
{
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/CSharp-Mode.xshd b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/CSharp-Mode.xshd
index df9c00c2fb..25ec01f79f 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/CSharp-Mode.xshd
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/Resources/CSharp-Mode.xshd
@@ -43,7 +43,7 @@
\#
-
+
(define|undef|if|elif|else|endif|line)\b
@@ -97,7 +97,7 @@
- @"
+ @"
"
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
index f3465f2edc..eb72d70596 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
@@ -232,6 +232,7 @@
IVisualLineTransformer.cs
+
IVisualLineTransformer.cs
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/ColumnRulerRenderer.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/ColumnRulerRenderer.cs
new file mode 100644
index 0000000000..f809b57de4
--- /dev/null
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/ColumnRulerRenderer.cs
@@ -0,0 +1,65 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Windows;
+using System.Windows.Media;
+
+using ICSharpCode.AvalonEdit.Rendering;
+using ICSharpCode.AvalonEdit.Utils;
+
+namespace ICSharpCode.AvalonEdit
+{
+ ///
+ /// Renders a ruler at a certain column.
+ ///
+ public class ColumnRulerRenderer : IBackgroundRenderer
+ {
+ Pen pen;
+ int column;
+ TextView textView;
+
+ public const string Name = "Column ruler";
+ public static readonly Color DefaultForeground = Colors.LightGray;
+
+ public ColumnRulerRenderer(TextView textView)
+ {
+ if (textView == null)
+ throw new ArgumentNullException("textView");
+
+ this.pen = new Pen(new SolidColorBrush(DefaultForeground), 1);
+ this.pen.Freeze();
+ this.textView = textView;
+ this.textView.BackgroundRenderers.Add(this);
+ }
+
+ public KnownLayer Layer {
+ get { return KnownLayer.Background; }
+ }
+
+ public void SetRuler(int column, Brush brush)
+ {
+ if (this.column != column) {
+ this.column = column;
+ textView.InvalidateLayer(this.Layer);
+ }
+ if (pen.Brush != brush) {
+ this.pen = new Pen(brush, 1);
+ this.pen.Freeze();
+ textView.InvalidateLayer(this.Layer);
+ }
+ }
+
+ public void Draw(TextView textView, System.Windows.Media.DrawingContext drawingContext)
+ {
+ if (column < 1) return;
+ double offset = textView.WideSpaceWidth * column;
+ Size pixelSize = PixelSnapHelpers.GetPixelSize(textView);
+ double markerXPos = PixelSnapHelpers.PixelAlign(offset, pixelSize.Width);
+ Point start = new Point(markerXPos, 0);
+ Point end = new Point(markerXPos, Math.Max(textView.DocumentHeight, textView.ActualHeight));
+
+ drawingContext.DrawLine(pen, start, end);
+ }
+ }
+}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs
index 3fe052d8ec..5355858c57 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/TextView.cs
@@ -40,6 +40,8 @@ namespace ICSharpCode.AvalonEdit.Rendering
FocusableProperty.OverrideMetadata(typeof(TextView), new FrameworkPropertyMetadata(Boxes.False));
}
+ ColumnRulerRenderer columnRulerRenderer;
+
///
/// Creates a new TextView instance.
///
@@ -50,7 +52,10 @@ namespace ICSharpCode.AvalonEdit.Rendering
elementGenerators = new ObserveAddRemoveCollection(ElementGenerator_Added, ElementGenerator_Removed);
lineTransformers = new ObserveAddRemoveCollection(LineTransformer_Added, LineTransformer_Removed);
backgroundRenderers = new ObserveAddRemoveCollection(BackgroundRenderer_Added, BackgroundRenderer_Removed);
+ columnRulerRenderer = new ColumnRulerRenderer(this);
this.Options = new TextEditorOptions();
+ this.columnRulerRenderer.SetRuler(Options.ColumnRulerPosition, ColumnRulerBrush);
+
Debug.Assert(singleCharacterElementGenerator != null); // assert that the option change created the builtin element generators
layers = new LayerCollection(this);
@@ -178,7 +183,7 @@ namespace ICSharpCode.AvalonEdit.Rendering
new FrameworkPropertyMetadata(OnOptionsChanged));
///
- /// Gets/Sets the document displayed by the text editor.
+ /// Gets/Sets the options used by the text editor.
///
public TextEditorOptions Options {
get { return (TextEditorOptions)GetValue(OptionsProperty); }
@@ -198,6 +203,15 @@ namespace ICSharpCode.AvalonEdit.Rendering
if (OptionChanged != null) {
OptionChanged(this, e);
}
+
+ // PropertyName == null means all properties are changed
+ if (e.PropertyName == null || e.PropertyName == "ColumnRulerPosition" || e.PropertyName == "ShowColumnRuler") {
+ if (Options.ShowColumnRuler)
+ columnRulerRenderer.SetRuler(Options.ColumnRulerPosition, ColumnRulerBrush);
+ else
+ columnRulerRenderer.SetRuler(-1, ColumnRulerBrush);
+ }
+
UpdateBuiltinElementGeneratorsFromOptions();
Redraw();
}
@@ -538,6 +552,36 @@ namespace ICSharpCode.AvalonEdit.Rendering
get { return (Brush)GetValue(NonPrintableCharacterBrushProperty); }
set { SetValue(NonPrintableCharacterBrushProperty, value); }
}
+
+ ///
+ /// LinkTextForegroundBrush dependency property.
+ ///
+ public static readonly DependencyProperty LinkTextForegroundBrushProperty =
+ DependencyProperty.Register("LinkTextForegroundBrush", typeof(Brush), typeof(TextView),
+ new FrameworkPropertyMetadata(Brushes.Blue));
+
+ ///
+ /// Gets/sets the Brush used for displaying link texts.
+ ///
+ public Brush LinkTextForegroundBrush {
+ get { return (Brush)GetValue(LinkTextForegroundBrushProperty); }
+ set { SetValue(LinkTextForegroundBrushProperty, value); }
+ }
+
+ ///
+ /// LinkTextBackgroundBrush dependency property.
+ ///
+ public static readonly DependencyProperty LinkTextBackgroundBrushProperty =
+ DependencyProperty.Register("LinkTextBackgroundBrush", typeof(Brush), typeof(TextView),
+ new FrameworkPropertyMetadata(Brushes.Transparent));
+
+ ///
+ /// Gets/sets the Brush used for the background of link texts.
+ ///
+ public Brush LinkTextBackgroundBrush {
+ get { return (Brush)GetValue(LinkTextBackgroundBrushProperty); }
+ set { SetValue(LinkTextBackgroundBrushProperty, value); }
+ }
#endregion
#region Redraw methods / VisualLine invalidation
@@ -899,7 +943,8 @@ namespace ICSharpCode.AvalonEdit.Rendering
// number of pixels clipped from the first visual line(s)
clippedPixelsOnTop = scrollOffset.Y - heightTree.GetVisualPosition(firstLineInView);
- Debug.Assert(clippedPixelsOnTop >= 0);
+ // clippedPixelsOnTop should be >= 0, except for floating point inaccurracy.
+ Debug.Assert(clippedPixelsOnTop >= -ExtensionMethods.Epsilon);
newVisualLines = new List();
@@ -1886,7 +1931,9 @@ namespace ICSharpCode.AvalonEdit.Rendering
// and we need to re-measure the font metrics:
InvalidateDefaultTextMetrics();
} else if (e.Property == Control.ForegroundProperty
- || e.Property == TextView.NonPrintableCharacterBrushProperty)
+ || e.Property == TextView.NonPrintableCharacterBrushProperty
+ || e.Property == TextView.LinkTextBackgroundBrushProperty
+ || e.Property == TextView.LinkTextForegroundBrushProperty)
{
// changing brushes requires recreating the cached elements
RecreateCachedElements();
@@ -1905,5 +1952,23 @@ namespace ICSharpCode.AvalonEdit.Rendering
Redraw();
}
}
+
+ public static readonly DependencyProperty ColumnRulerBrushProperty =
+ DependencyProperty.Register("ColumnRulerBrush", typeof(Brush), typeof(TextView),
+ new FrameworkPropertyMetadata(Brushes.LightGray, OnUpdateBrushes));
+
+ public Brush ColumnRulerBrush {
+ get { return (Brush)GetValue(ColumnRulerBrushProperty); }
+ set { SetValue(ColumnRulerBrushProperty, value); }
+ }
+
+ public static void OnUpdateBrushes(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ TextView view = d as TextView;
+ if (view == null) return;
+ if (e.Property == ColumnRulerBrushProperty)
+ view.columnRulerRenderer.SetRuler(view.Options.ColumnRulerPosition, (Brush)e.NewValue);
+ }
+
}
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs
index a2c15e579f..29482dbc5b 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLineLinkText.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections.Generic;
using System.Diagnostics;
using System.Windows;
using System.Windows.Documents;
@@ -46,7 +47,8 @@ namespace ICSharpCode.AvalonEdit.Rendering
///
public override TextRun CreateTextRun(int startVisualColumn, ITextRunConstructionContext context)
{
- this.TextRunProperties.SetForegroundBrush(Brushes.Blue);
+ this.TextRunProperties.SetForegroundBrush(context.TextView.LinkTextForegroundBrush);
+ this.TextRunProperties.SetBackgroundBrush(context.TextView.LinkTextBackgroundBrush);
this.TextRunProperties.SetTextDecorations(TextDecorations.Underline);
return base.CreateTextRun(startVisualColumn, context);
}
diff --git a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs
index cd9d13d3da..f43856a2ad 100644
--- a/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs
+++ b/src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/TextEditorOptions.cs
@@ -398,5 +398,37 @@ namespace ICSharpCode.AvalonEdit
}
}
}
+
+ bool showColumnRuler = false;
+
+ ///
+ /// Gets/Sets whether the column ruler should be shown.
+ ///
+ [DefaultValue(false)]
+ public virtual bool ShowColumnRuler {
+ get { return showColumnRuler; }
+ set {
+ if (showColumnRuler != value) {
+ showColumnRuler = value;
+ OnPropertyChanged("ShowColumnRuler");
+ }
+ }
+ }
+
+ int columnRulerPosition = 80;
+
+ ///
+ /// Gets/Sets where the column ruler should be shown.
+ ///
+ [DefaultValue(80)]
+ public virtual int ColumnRulerPosition {
+ get { return columnRulerPosition; }
+ set {
+ if (columnRulerPosition != value) {
+ columnRulerPosition = value;
+ OnPropertyChanged("ColumnRulerPosition");
+ }
+ }
+ }
}
}
diff --git a/src/Libraries/ICSharpCode.Decompiler/Ast/AstBuilder.cs b/src/Libraries/ICSharpCode.Decompiler/Ast/AstBuilder.cs
index fc288d80fd..a95ddbaf2d 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Ast/AstBuilder.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Ast/AstBuilder.cs
@@ -81,6 +81,8 @@ namespace ICSharpCode.Decompiler.Ast
return true;
if (settings.YieldReturn && YieldReturnDecompiler.IsCompilerGeneratorEnumerator(type))
return true;
+ if (settings.AsyncAwait && AsyncDecompiler.IsCompilerGeneratedStateMachine(type))
+ return true;
} else if (type.IsCompilerGenerated()) {
if (type.Name.StartsWith("", StringComparison.Ordinal))
return true;
@@ -770,6 +772,10 @@ namespace ICSharpCode.Decompiler.Ast
SetNewModifier(astMethod);
}
astMethod.Body = CreateMethodBody(methodDef, astMethod.Parameters);
+ if (context.CurrentMethodIsAsync) {
+ astMethod.Modifiers |= Modifiers.Async;
+ context.CurrentMethodIsAsync = false;
+ }
}
ConvertAttributes(astMethod, methodDef);
if (methodDef.HasCustomAttributes && astMethod.Parameters.Count > 0) {
@@ -1342,6 +1348,7 @@ namespace ICSharpCode.Decompiler.Ast
static void ConvertCustomAttributes(AstNode attributedNode, ICustomAttributeProvider customAttributeProvider, string attributeTarget = null)
{
+ EntityDeclaration entityDecl = attributedNode as EntityDeclaration;
if (customAttributeProvider.HasCustomAttributes) {
var attributes = new List();
foreach (var customAttribute in customAttributeProvider.CustomAttributes.OrderBy(a => a.AttributeType.FullName)) {
@@ -1353,6 +1360,15 @@ namespace ICSharpCode.Decompiler.Ast
// don't show the ParamArrayAttribute (it's converted to the 'params' modifier)
continue;
}
+ // if the method is async, remove [DebuggerStepThrough] and [Async
+ if (entityDecl != null && entityDecl.HasModifier(Modifiers.Async)) {
+ if (customAttribute.AttributeType.Name == "DebuggerStepThroughAttribute" && customAttribute.AttributeType.Namespace == "System.Diagnostics") {
+ continue;
+ }
+ if (customAttribute.AttributeType.Name == "AsyncStateMachineAttribute" && customAttribute.AttributeType.Namespace == "System.Runtime.CompilerServices") {
+ continue;
+ }
+ }
var attribute = new ICSharpCode.NRefactory.CSharp.Attribute();
attribute.AddAnnotation(customAttribute);
diff --git a/src/Libraries/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs b/src/Libraries/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs
index 5de5b0ba5a..8ad9047c1c 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs
@@ -58,6 +58,7 @@ namespace ICSharpCode.Decompiler.Ast
MethodDefinition oldCurrentMethod = context.CurrentMethod;
Debug.Assert(oldCurrentMethod == null || oldCurrentMethod == methodDef);
context.CurrentMethod = methodDef;
+ context.CurrentMethodIsAsync = false;
try {
AstMethodBodyBuilder builder = new AstMethodBodyBuilder();
builder.methodDef = methodDef;
@@ -847,8 +848,11 @@ namespace ICSharpCode.Decompiler.Ast
case ILCode.ExpressionTreeParameterDeclarations:
args[args.Count - 1].AddAnnotation(new ParameterDeclarationAnnotation(byteCode));
return args[args.Count - 1];
+ case ILCode.Await:
+ return new UnaryOperatorExpression(UnaryOperatorType.Await, arg1);
case ILCode.NullableOf:
- case ILCode.ValueOf: return arg1;
+ case ILCode.ValueOf:
+ return arg1;
default:
throw new Exception("Unknown OpCode: " + byteCode.Code);
}
diff --git a/src/Libraries/ICSharpCode.Decompiler/Ast/DecompilerContext.cs b/src/Libraries/ICSharpCode.Decompiler/Ast/DecompilerContext.cs
index 4a3f277827..624b1b33fd 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Ast/DecompilerContext.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Ast/DecompilerContext.cs
@@ -33,6 +33,7 @@ namespace ICSharpCode.Decompiler
public TypeDefinition CurrentType;
public MethodDefinition CurrentMethod;
public DecompilerSettings Settings = new DecompilerSettings();
+ public bool CurrentMethodIsAsync;
// public ITypeResolveContext TypeResolveContext;
// public IProjectContent ProjectContent;
diff --git a/src/Libraries/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs b/src/Libraries/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs
index 85fef513ee..b17e24656f 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs
@@ -114,6 +114,9 @@ namespace ICSharpCode.Decompiler.Ast
object GetCurrentLocalDefinition()
{
AstNode node = nodeStack.Peek();
+ if (node is Identifier && node.Parent != null)
+ node = node.Parent;
+
var parameterDef = node.Annotation();
if (parameterDef != null)
return parameterDef;
@@ -126,14 +129,11 @@ namespace ICSharpCode.Decompiler.Ast
//if (variable.OriginalVariable != null)
// return variable.OriginalVariable;
return variable;
- } else {
-
}
}
var label = node as LabelStatement;
- if (label != null)
- {
+ if (label != null) {
var method = nodeStack.Select(nd => nd.Annotation()).FirstOrDefault(mr => mr != null);
if (method != null)
return method.ToString() + label.Label;
diff --git a/src/Libraries/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs b/src/Libraries/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs
index 9264000f08..9c5aa97f6e 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs
@@ -151,6 +151,7 @@ namespace ICSharpCode.Decompiler.Ast.Transforms
DecompilerContext subContext = context.Clone();
subContext.CurrentMethod = method;
+ subContext.CurrentMethodIsAsync = false;
subContext.ReservedVariableNames.AddRange(currentlyUsedVariableNames);
BlockStatement body = AstMethodBodyBuilder.CreateMethodBody(method, subContext, ame.Parameters);
TransformationPipeline.RunTransformationsUntil(body, v => v is DelegateConstruction, subContext);
diff --git a/src/Libraries/ICSharpCode.Decompiler/DecompilerSettings.cs b/src/Libraries/ICSharpCode.Decompiler/DecompilerSettings.cs
index 435124491c..f78194a6f9 100644
--- a/src/Libraries/ICSharpCode.Decompiler/DecompilerSettings.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/DecompilerSettings.cs
@@ -72,6 +72,21 @@ namespace ICSharpCode.Decompiler
}
}
+ bool asyncAwait = true;
+
+ ///
+ /// Decompile async methods.
+ ///
+ public bool AsyncAwait {
+ get { return asyncAwait; }
+ set {
+ if (asyncAwait != value) {
+ asyncAwait = value;
+ OnPropertyChanged("AsyncAwait");
+ }
+ }
+ }
+
bool automaticProperties = true;
///
diff --git a/src/Libraries/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj b/src/Libraries/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj
index 846edc60a2..60bead91a6 100644
--- a/src/Libraries/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj
+++ b/src/Libraries/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj
@@ -101,6 +101,7 @@
+
@@ -114,6 +115,8 @@
+
+
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/AsyncDecompiler.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/AsyncDecompiler.cs
new file mode 100644
index 0000000000..4535c0f82a
--- /dev/null
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/AsyncDecompiler.cs
@@ -0,0 +1,653 @@
+// Copyright (c) 2012 AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using Mono.Cecil;
+using Mono.Cecil.Cil;
+
+namespace ICSharpCode.Decompiler.ILAst
+{
+ ///
+ /// Decompiler step for C# 5 async/await.
+ ///
+ class AsyncDecompiler
+ {
+ public static bool IsCompilerGeneratedStateMachine(TypeDefinition type)
+ {
+ if (!(type.DeclaringType != null && type.IsCompilerGenerated()))
+ return false;
+ foreach (TypeReference i in type.Interfaces) {
+ if (i.Namespace == "System.Runtime.CompilerServices" && i.Name == "IAsyncStateMachine")
+ return true;
+ }
+ return false;
+ }
+
+ enum AsyncMethodType
+ {
+ Void,
+ Task,
+ TaskOfT
+ }
+
+ DecompilerContext context;
+
+ // These fields are set by MatchTaskCreationPattern()
+ AsyncMethodType methodType;
+ int initialState;
+ TypeDefinition stateMachineStruct;
+ MethodDefinition moveNextMethod;
+ FieldDefinition builderField;
+ FieldDefinition stateField;
+ Dictionary fieldToParameterMap = new Dictionary();
+
+ // These fields are set by AnalyzeMoveNext()
+ int finalState = -2;
+ ILTryCatchBlock mainTryCatch;
+ ILLabel setResultAndExitLabel;
+ ILLabel exitLabel;
+ ILExpression resultExpr;
+
+ #region RunStep1() method
+ public static void RunStep1(DecompilerContext context, ILBlock method)
+ {
+ if (!context.Settings.AsyncAwait)
+ return; // abort if async decompilation is disabled
+ var yrd = new AsyncDecompiler();
+ yrd.context = context;
+ if (!yrd.MatchTaskCreationPattern(method))
+ return;
+ #if DEBUG
+ if (Debugger.IsAttached) {
+ yrd.Run();
+ } else {
+ #endif
+ try {
+ yrd.Run();
+ } catch (SymbolicAnalysisFailedException) {
+ return;
+ }
+ #if DEBUG
+ }
+ #endif
+ context.CurrentMethodIsAsync = true;
+
+ method.Body.Clear();
+ method.EntryGoto = null;
+ method.Body.AddRange(yrd.newTopLevelBody);
+ ILAstOptimizer.RemoveRedundantCode(method);
+ }
+
+ void Run()
+ {
+ AnalyzeMoveNext();
+ ValidateCatchBlock(mainTryCatch.CatchBlocks[0]);
+ AnalyzeStateMachine(mainTryCatch.TryBlock);
+ // AnalyzeStateMachine invokes ConvertBody
+ MarkGeneratedVariables();
+ YieldReturnDecompiler.TranslateFieldsToLocalAccess(newTopLevelBody, fieldToParameterMap);
+ }
+ #endregion
+
+ #region MatchTaskCreationPattern
+ bool MatchTaskCreationPattern(ILBlock method)
+ {
+ if (method.Body.Count < 5)
+ return false;
+ // Check the second-to-last instruction (the start call) first, as we can get the most information from that
+ MethodReference startMethod;
+ ILExpression loadStartTarget, loadStartArgument;
+ // call(AsyncTaskMethodBuilder::Start, ldloca(builder), ldloca(stateMachine))
+ if (!method.Body[method.Body.Count - 2].Match(ILCode.Call, out startMethod, out loadStartTarget, out loadStartArgument))
+ return false;
+ if (startMethod.Name != "Start" || startMethod.DeclaringType == null || startMethod.DeclaringType.Namespace != "System.Runtime.CompilerServices")
+ return false;
+ switch (startMethod.DeclaringType.Name) {
+ case "AsyncTaskMethodBuilder`1":
+ methodType = AsyncMethodType.TaskOfT;
+ break;
+ case "AsyncTaskMethodBuilder":
+ methodType = AsyncMethodType.Task;
+ break;
+ case "AsyncVoidMethodBuilder":
+ methodType = AsyncMethodType.Void;
+ break;
+ default:
+ return false;
+ }
+ ILVariable stateMachineVar, builderVar;
+ if (!loadStartTarget.Match(ILCode.Ldloca, out builderVar))
+ return false;
+ if (!loadStartArgument.Match(ILCode.Ldloca, out stateMachineVar))
+ return false;
+
+ stateMachineStruct = stateMachineVar.Type.ResolveWithinSameModule();
+ if (stateMachineStruct == null || !stateMachineStruct.IsValueType)
+ return false;
+ moveNextMethod = stateMachineStruct.Methods.FirstOrDefault(f => f.Name == "MoveNext");
+ if (moveNextMethod == null)
+ return false;
+
+ // Check third-to-last instruction (copy of builder):
+ // stloc(builder, ldfld(StateMachine::<>t__builder, ldloca(stateMachine)))
+ ILExpression loadBuilderExpr;
+ if (!method.Body[method.Body.Count - 3].MatchStloc(builderVar, out loadBuilderExpr))
+ return false;
+ FieldReference builderFieldRef;
+ ILExpression loadStateMachineForBuilderExpr;
+ if (!loadBuilderExpr.Match(ILCode.Ldfld, out builderFieldRef, out loadStateMachineForBuilderExpr))
+ return false;
+ if (!loadStateMachineForBuilderExpr.MatchLdloca(stateMachineVar))
+ return false;
+ builderField = builderFieldRef.ResolveWithinSameModule();
+ if (builderField == null)
+ return false;
+
+ // Check the last instruction (ret)
+ if (methodType == AsyncMethodType.Void) {
+ if (!method.Body[method.Body.Count - 1].Match(ILCode.Ret))
+ return false;
+ } else {
+ // ret(call(AsyncTaskMethodBuilder::get_Task, ldflda(StateMachine::<>t__builder, ldloca(stateMachine))))
+ ILExpression returnValue;
+ if (!method.Body[method.Body.Count - 1].Match(ILCode.Ret, out returnValue))
+ return false;
+ MethodReference getTaskMethod;
+ ILExpression builderExpr;
+ if (!returnValue.Match(ILCode.Call, out getTaskMethod, out builderExpr))
+ return false;
+ ILExpression loadStateMachineForBuilderExpr2;
+ FieldReference builderField2;
+ if (!builderExpr.Match(ILCode.Ldflda, out builderField2, out loadStateMachineForBuilderExpr2))
+ return false;
+ if (builderField2.ResolveWithinSameModule() != builderField || !loadStateMachineForBuilderExpr2.MatchLdloca(stateMachineVar))
+ return false;
+ }
+
+ // Check the last field assignment - this should be the state field
+ ILExpression initialStateExpr;
+ if (!MatchStFld(method.Body[method.Body.Count - 4], stateMachineVar, out stateField, out initialStateExpr))
+ return false;
+ if (!initialStateExpr.Match(ILCode.Ldc_I4, out initialState))
+ return false;
+ if (initialState != -1)
+ return false;
+
+ // Check the second-to-last field assignment - this should be the builder field
+ FieldDefinition builderField3;
+ ILExpression builderInitialization;
+ if (!MatchStFld(method.Body[method.Body.Count - 5], stateMachineVar, out builderField3, out builderInitialization))
+ return false;
+ MethodReference createMethodRef;
+ if (builderField3 != builderField || !builderInitialization.Match(ILCode.Call, out createMethodRef))
+ return false;
+ if (createMethodRef.Name != "Create")
+ return false;
+
+ for (int i = 0; i < method.Body.Count - 5; i++) {
+ FieldDefinition field;
+ ILExpression fieldInit;
+ if (!MatchStFld(method.Body[i], stateMachineVar, out field, out fieldInit))
+ return false;
+ ILVariable v;
+ if (!fieldInit.Match(ILCode.Ldloc, out v))
+ return false;
+ if (!v.IsParameter)
+ return false;
+ fieldToParameterMap[field] = v;
+ }
+
+ return true;
+ }
+
+ static bool MatchStFld(ILNode stfld, ILVariable stateMachineVar, out FieldDefinition field, out ILExpression expr)
+ {
+ field = null;
+ FieldReference fieldRef;
+ ILExpression ldloca;
+ if (!stfld.Match(ILCode.Stfld, out fieldRef, out ldloca, out expr))
+ return false;
+ field = fieldRef.ResolveWithinSameModule();
+ return field != null && ldloca.MatchLdloca(stateMachineVar);
+ }
+ #endregion
+
+ #region Analyze MoveNext
+ void AnalyzeMoveNext()
+ {
+ ILBlock ilMethod = CreateILAst(moveNextMethod);
+
+ if (ilMethod.Body.Count != 6)
+ throw new SymbolicAnalysisFailedException();
+
+ mainTryCatch = ilMethod.Body[0] as ILTryCatchBlock;
+ if (mainTryCatch == null || mainTryCatch.CatchBlocks.Count != 1)
+ throw new SymbolicAnalysisFailedException();
+ if (mainTryCatch.FaultBlock != null || mainTryCatch.FinallyBlock != null)
+ throw new SymbolicAnalysisFailedException();
+
+ setResultAndExitLabel = ilMethod.Body[1] as ILLabel;
+ if (setResultAndExitLabel == null)
+ throw new SymbolicAnalysisFailedException();
+
+ if (!MatchStateAssignment(ilMethod.Body[2], out finalState))
+ throw new SymbolicAnalysisFailedException();
+
+ // call(AsyncTaskMethodBuilder`1::SetResult, ldflda(StateMachine::<>t__builder, ldloc(this)), ldloc(<>t__result))
+ MethodReference setResultMethod;
+ ILExpression builderExpr;
+ if (methodType == AsyncMethodType.TaskOfT) {
+ if (!ilMethod.Body[3].Match(ILCode.Call, out setResultMethod, out builderExpr, out resultExpr))
+ throw new SymbolicAnalysisFailedException();
+ } else {
+ if (!ilMethod.Body[3].Match(ILCode.Call, out setResultMethod, out builderExpr))
+ throw new SymbolicAnalysisFailedException();
+ }
+ if (!(setResultMethod.Name == "SetResult" && IsBuilderFieldOnThis(builderExpr)))
+ throw new SymbolicAnalysisFailedException();
+
+ exitLabel = ilMethod.Body[4] as ILLabel;
+ if (exitLabel == null)
+ throw new SymbolicAnalysisFailedException();
+ }
+
+ ///
+ /// Creates ILAst for the specified method, optimized up to before the 'YieldReturn' step.
+ ///
+ ILBlock CreateILAst(MethodDefinition method)
+ {
+ if (method == null || !method.HasBody)
+ throw new SymbolicAnalysisFailedException();
+
+ ILBlock ilMethod = new ILBlock();
+ ILAstBuilder astBuilder = new ILAstBuilder();
+ ilMethod.Body = astBuilder.Build(method, true, context);
+ ILAstOptimizer optimizer = new ILAstOptimizer();
+ optimizer.Optimize(context, ilMethod, ILAstOptimizationStep.YieldReturn);
+ return ilMethod;
+ }
+
+ void ValidateCatchBlock(ILTryCatchBlock.CatchBlock catchBlock)
+ {
+ if (catchBlock.ExceptionType == null || catchBlock.ExceptionType.Name != "Exception")
+ throw new SymbolicAnalysisFailedException();
+ if (catchBlock.Body.Count != 3)
+ throw new SymbolicAnalysisFailedException();
+ int stateID;
+ if (!(MatchStateAssignment(catchBlock.Body[0], out stateID) && stateID == finalState))
+ throw new SymbolicAnalysisFailedException();
+ MethodReference setExceptionMethod;
+ ILExpression builderExpr, exceptionExpr;
+ if (!catchBlock.Body[1].Match(ILCode.Call, out setExceptionMethod, out builderExpr, out exceptionExpr))
+ throw new SymbolicAnalysisFailedException();
+ if (!(setExceptionMethod.Name == "SetException" && IsBuilderFieldOnThis(builderExpr) && exceptionExpr.MatchLdloc(catchBlock.ExceptionVariable)))
+ throw new SymbolicAnalysisFailedException();
+
+ ILLabel label;
+ if (!(catchBlock.Body[2].Match(ILCode.Leave, out label) && label == exitLabel))
+ throw new SymbolicAnalysisFailedException();
+ }
+
+ bool IsBuilderFieldOnThis(ILExpression builderExpr)
+ {
+ // ldflda(StateMachine::<>t__builder, ldloc(this))
+ FieldReference fieldRef;
+ ILExpression target;
+ return builderExpr.Match(ILCode.Ldflda, out fieldRef, out target)
+ && fieldRef.ResolveWithinSameModule() == builderField
+ && target.MatchThis();
+ }
+
+ bool MatchStateAssignment(ILNode stfld, out int stateID)
+ {
+ // stfld(StateMachine::<>1__state, ldloc(this), ldc.i4(-2))
+ stateID = 0;
+ FieldReference fieldRef;
+ ILExpression target, val;
+ if (stfld.Match(ILCode.Stfld, out fieldRef, out target, out val)) {
+ return fieldRef.ResolveWithinSameModule() == stateField
+ && target.MatchThis()
+ && val.Match(ILCode.Ldc_I4, out stateID);
+ }
+ return false;
+ }
+ #endregion
+
+ #region AnalyzeStateMachine
+ ILVariable doFinallyBodies;
+ List newTopLevelBody;
+
+ void AnalyzeStateMachine(ILBlock block)
+ {
+ var body = block.Body;
+ if (body.Count == 0)
+ throw new SymbolicAnalysisFailedException();
+ if (DetectDoFinallyBodies(body)) {
+ body.RemoveAt(0);
+ if (body.Count == 0)
+ throw new SymbolicAnalysisFailedException();
+ }
+ StateRangeAnalysis rangeAnalysis = new StateRangeAnalysis(body[0], StateRangeAnalysisMode.AsyncMoveNext, stateField);
+ int bodyLength = block.Body.Count;
+ int pos = rangeAnalysis.AssignStateRanges(body, bodyLength);
+ rangeAnalysis.EnsureLabelAtPos(body, ref pos, ref bodyLength);
+
+ var labelStateRangeMapping = rangeAnalysis.CreateLabelRangeMapping(body, pos, bodyLength);
+ newTopLevelBody = ConvertBody(body, pos, bodyLength, labelStateRangeMapping);
+ newTopLevelBody.Insert(0, MakeGoTo(labelStateRangeMapping, initialState));
+ newTopLevelBody.Add(setResultAndExitLabel);
+ if (methodType == AsyncMethodType.TaskOfT) {
+ newTopLevelBody.Add(new ILExpression(ILCode.Ret, null, resultExpr));
+ } else {
+ newTopLevelBody.Add(new ILExpression(ILCode.Ret, null));
+ }
+ }
+
+ bool DetectDoFinallyBodies(List body)
+ {
+ ILVariable v;
+ ILExpression initExpr;
+ if (!body[0].Match(ILCode.Stloc, out v, out initExpr))
+ return false;
+ int initialValue;
+ if (!(initExpr.Match(ILCode.Ldc_I4, out initialValue) && initialValue == 1))
+ return false;
+ doFinallyBodies = v;
+ return true;
+ }
+ #endregion
+
+ #region ConvertBody
+ ILExpression MakeGoTo(LabelRangeMapping mapping, int state)
+ {
+ foreach (var pair in mapping) {
+ if (pair.Value.Contains(state))
+ return new ILExpression(ILCode.Br, pair.Key);
+ }
+ throw new SymbolicAnalysisFailedException();
+ }
+
+ List ConvertBody(List body, int startPos, int bodyLength, LabelRangeMapping mapping)
+ {
+ List newBody = new List();
+ // Copy all instructions from the old body to newBody.
+ for (int pos = startPos; pos < bodyLength; pos++) {
+ ILTryCatchBlock tryCatchBlock = body[pos] as ILTryCatchBlock;
+ ILExpression expr = body[pos] as ILExpression;
+ if (expr != null && expr.Code == ILCode.Leave && expr.Operand == exitLabel) {
+ ILVariable awaiterVar;
+ FieldDefinition awaiterField;
+ int targetStateID;
+ HandleAwait(newBody, out awaiterVar, out awaiterField, out targetStateID);
+ MarkAsGeneratedVariable(awaiterVar);
+ newBody.Add(new ILExpression(ILCode.Await, null, new ILExpression(ILCode.Ldloca, awaiterVar)));
+ newBody.Add(MakeGoTo(mapping, targetStateID));
+ } else if (tryCatchBlock != null) {
+ ILTryCatchBlock newTryCatchBlock = new ILTryCatchBlock();
+ var tryBody = tryCatchBlock.TryBlock.Body;
+ if (tryBody.Count == 0)
+ throw new SymbolicAnalysisFailedException();
+ StateRangeAnalysis rangeAnalysis = new StateRangeAnalysis(tryBody[0], StateRangeAnalysisMode.AsyncMoveNext, stateField);
+ int tryBodyLength = tryBody.Count;
+ int posInTryBody = rangeAnalysis.AssignStateRanges(tryBody, tryBodyLength);
+ rangeAnalysis.EnsureLabelAtPos(tryBody, ref posInTryBody, ref tryBodyLength);
+
+ var mappingInTryBlock = rangeAnalysis.CreateLabelRangeMapping(tryBody, posInTryBody, tryBodyLength);
+ var newTryBody = ConvertBody(tryBody, posInTryBody, tryBodyLength, mappingInTryBlock);
+ newTryBody.Insert(0, MakeGoTo(mappingInTryBlock, initialState));
+
+ // If there's a label at the beginning of the state dispatcher, copy that
+ if (posInTryBody > 0 && tryBody.FirstOrDefault() is ILLabel)
+ newTryBody.Insert(0, tryBody.First());
+
+ newTryCatchBlock.TryBlock = new ILBlock(newTryBody);
+ newTryCatchBlock.CatchBlocks = new List(tryCatchBlock.CatchBlocks);
+ newTryCatchBlock.FaultBlock = tryCatchBlock.FaultBlock;
+ if (tryCatchBlock.FinallyBlock != null)
+ newTryCatchBlock.FinallyBlock = new ILBlock(ConvertFinally(tryCatchBlock.FinallyBlock.Body));
+
+ newBody.Add(newTryCatchBlock);
+ } else {
+ newBody.Add(body[pos]);
+ }
+ }
+ return newBody;
+ }
+
+ List ConvertFinally(List body)
+ {
+ List newBody = new List(body);
+ ILLabel endFinallyLabel;
+ ILExpression ceqExpr;
+ if (newBody.Count > 0 && newBody[0].Match(ILCode.Brtrue, out endFinallyLabel, out ceqExpr)) {
+ ILExpression loadDoFinallyBodies, loadZero;
+ object unused;
+ if (ceqExpr.Match(ILCode.Ceq, out unused, out loadDoFinallyBodies, out loadZero)) {
+ int num;
+ if (loadDoFinallyBodies.MatchLdloc(doFinallyBodies) && loadZero.Match(ILCode.Ldc_I4, out num) && num == 0) {
+ newBody.RemoveAt(0);
+ }
+ } else if (ceqExpr.Match(ILCode.LogicNot, out loadDoFinallyBodies)) {
+ if (loadDoFinallyBodies.MatchLdloc(doFinallyBodies)) {
+ newBody.RemoveAt(0);
+ }
+ }
+ }
+ return newBody;
+ }
+
+ void HandleAwait(List newBody, out ILVariable awaiterVar, out FieldDefinition awaiterField, out int targetStateID)
+ {
+ // Handle the instructions prior to the exit out of the method to detect what is being awaited.
+ // (analyses the last instructions in newBody and removes the analyzed instructions from newBody)
+
+ if (doFinallyBodies != null) {
+ // stloc(<>t__doFinallyBodies, ldc.i4(0))
+ ILExpression dfbInitExpr;
+ if (!newBody.LastOrDefault().MatchStloc(doFinallyBodies, out dfbInitExpr))
+ throw new SymbolicAnalysisFailedException();
+ int val;
+ if (!(dfbInitExpr.Match(ILCode.Ldc_I4, out val) && val == 0))
+ throw new SymbolicAnalysisFailedException();
+ newBody.RemoveAt(newBody.Count - 1); // remove doFinallyBodies assignment
+ }
+
+ // call(AsyncTaskMethodBuilder::AwaitUnsafeOnCompleted, ldflda(StateMachine::<>t__builder, ldloc(this)), ldloca(CS$0$0001), ldloc(this))
+ ILExpression callAwaitUnsafeOnCompleted = newBody.LastOrDefault() as ILExpression;
+ newBody.RemoveAt(newBody.Count - 1); // remove AwaitUnsafeOnCompleted call
+ if (callAwaitUnsafeOnCompleted == null || callAwaitUnsafeOnCompleted.Code != ILCode.Call)
+ throw new SymbolicAnalysisFailedException();
+ if (((MethodReference)callAwaitUnsafeOnCompleted.Operand).Name != "AwaitUnsafeOnCompleted")
+ throw new SymbolicAnalysisFailedException();
+ if (callAwaitUnsafeOnCompleted.Arguments.Count != 3)
+ throw new SymbolicAnalysisFailedException();
+ if (!callAwaitUnsafeOnCompleted.Arguments[1].Match(ILCode.Ldloca, out awaiterVar))
+ throw new SymbolicAnalysisFailedException();
+
+ // stfld(StateMachine::<>u__$awaiter6, ldloc(this), ldloc(CS$0$0001))
+ FieldReference awaiterFieldRef;
+ ILExpression loadThis, loadAwaiterVar;
+ if (!newBody.LastOrDefault().Match(ILCode.Stfld, out awaiterFieldRef, out loadThis, out loadAwaiterVar))
+ throw new SymbolicAnalysisFailedException();
+ newBody.RemoveAt(newBody.Count - 1); // remove awaiter field assignment
+ awaiterField = awaiterFieldRef.ResolveWithinSameModule();
+ if (!(awaiterField != null && loadThis.MatchThis() && loadAwaiterVar.MatchLdloc(awaiterVar)))
+ throw new SymbolicAnalysisFailedException();
+
+ // stfld(StateMachine::<>1__state, ldloc(this), ldc.i4(0))
+ if (!MatchStateAssignment(newBody.LastOrDefault(), out targetStateID))
+ throw new SymbolicAnalysisFailedException();
+ newBody.RemoveAt(newBody.Count - 1); // remove awaiter field assignment
+ }
+ #endregion
+
+ #region MarkGeneratedVariables
+ int smallestGeneratedVariableIndex = int.MaxValue;
+
+ void MarkAsGeneratedVariable(ILVariable v)
+ {
+ if (v.OriginalVariable != null && v.OriginalVariable.Index >= 0) {
+ smallestGeneratedVariableIndex = Math.Min(smallestGeneratedVariableIndex, v.OriginalVariable.Index);
+ }
+ }
+
+ void MarkGeneratedVariables()
+ {
+ var expressions = new ILBlock(newTopLevelBody).GetSelfAndChildrenRecursive();
+ foreach (var v in expressions.Select(e => e.Operand).OfType()) {
+ if (v.OriginalVariable != null && v.OriginalVariable.Index >= smallestGeneratedVariableIndex)
+ v.IsGenerated = true;
+ }
+ }
+ #endregion
+
+ #region RunStep2() method
+ public static void RunStep2(DecompilerContext context, ILBlock method)
+ {
+ if (context.CurrentMethodIsAsync) {
+ Step2(method.Body);
+ ILAstOptimizer.RemoveRedundantCode(method);
+ // Repeat the inlining/copy propagation optimization because the conversion of field access
+ // to local variables can open up additional inlining possibilities.
+ ILInlining inlining = new ILInlining(method);
+ inlining.InlineAllVariables();
+ inlining.CopyPropagation();
+ }
+ }
+
+ static void Step2(List body)
+ {
+ for (int pos = 0; pos < body.Count; pos++) {
+ ILTryCatchBlock tc = body[pos] as ILTryCatchBlock;
+ if (tc != null) {
+ Step2(tc.TryBlock.Body);
+ } else {
+ Step2(body, ref pos);
+ }
+ }
+ }
+
+ static bool Step2(List body, ref int pos)
+ {
+ // stloc(CS$0$0001, callvirt(class System.Threading.Tasks.Task`1::GetAwaiter, awaiterExpr)
+ // brtrue(IL_7C, call(valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1::get_IsCompleted, ldloca(CS$0$0001)))
+ // await(ldloca(CS$0$0001))
+ // ...
+ // IL_7C:
+ // arg_8B_0 = call(valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1::GetResult, ldloca(CS$0$0001))
+ // initobj(valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1, ldloca(CS$0$0001))
+
+ ILExpression loadAwaiter;
+ ILVariable awaiterVar;
+ if (!body[pos].Match(ILCode.Await, out loadAwaiter))
+ return false;
+ if (!loadAwaiter.Match(ILCode.Ldloca, out awaiterVar))
+ return false;
+
+ ILVariable stackVar;
+ ILExpression stackExpr;
+ while (pos >= 1 && body[pos - 1].Match(ILCode.Stloc, out stackVar, out stackExpr))
+ pos--;
+
+ // stloc(CS$0$0001, callvirt(class System.Threading.Tasks.Task`1::GetAwaiter, awaiterExpr)
+ ILExpression getAwaiterCall;
+ if (!(pos >= 2 && body[pos - 2].MatchStloc(awaiterVar, out getAwaiterCall)))
+ return false;
+ MethodReference getAwaiterMethod;
+ ILExpression awaitedExpr;
+ if (!(getAwaiterCall.Match(ILCode.Call, out getAwaiterMethod, out awaitedExpr) || getAwaiterCall.Match(ILCode.Callvirt, out getAwaiterMethod, out awaitedExpr)))
+ return false;
+
+ if (awaitedExpr.Code == ILCode.AddressOf) {
+ // remove 'AddressOf()' when calling GetAwaiter() on a value type
+ awaitedExpr = awaitedExpr.Arguments[0];
+ }
+
+ // brtrue(IL_7C, call(valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1::get_IsCompleted, ldloca(CS$0$0001)))
+ ILLabel label;
+ ILExpression getIsCompletedCall;
+ if (!(pos >= 1 && body[pos - 1].Match(ILCode.Brtrue, out label, out getIsCompletedCall)))
+ return false;
+
+ int labelPos = body.IndexOf(label);
+ if (labelPos < pos)
+ return false;
+ for (int i = pos + 1; i < labelPos; i++) {
+ // validate that we aren't deleting any unexpected instructions -
+ // between the await and the label, there should only be the stack, awaiter and state logic
+ ILExpression expr = body[i] as ILExpression;
+ if (expr == null)
+ return false;
+ switch (expr.Code) {
+ case ILCode.Stloc:
+ case ILCode.Initobj:
+ case ILCode.Stfld:
+ case ILCode.Await:
+ // e.g.
+ // stloc(CS$0$0001, ldfld(StateMachine::<>u__$awaitere, ldloc(this)))
+ // initobj(valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1, ldloca(CS$0$0002_66))
+ // stfld('d__d'::<>u__$awaitere, ldloc(this), ldloc(CS$0$0002_66))
+ // stfld('d__d'::<>1__state, ldloc(this), ldc.i4(-1))
+ break;
+ default:
+ return false;
+ }
+ }
+ if (labelPos + 1 >= body.Count)
+ return false;
+ ILExpression resultAssignment = body[labelPos + 1] as ILExpression;
+ ILVariable resultVar;
+ ILExpression getResultCall;
+ bool isResultAssignment = resultAssignment.Match(ILCode.Stloc, out resultVar, out getResultCall);
+ if (!isResultAssignment)
+ getResultCall = resultAssignment;
+ if (!(getResultCall.Operand is MethodReference && ((MethodReference)getResultCall.Operand).Name == "GetResult"))
+ return false;
+
+ pos -= 2; // also delete 'stloc', 'brtrue' and 'await'
+ body.RemoveRange(pos, labelPos - pos);
+ Debug.Assert(body[pos] == label);
+
+ pos++;
+ if (isResultAssignment) {
+ Debug.Assert(body[pos] == resultAssignment);
+ resultAssignment.Arguments[0] = new ILExpression(ILCode.Await, null, awaitedExpr);
+ } else {
+ body[pos] = new ILExpression(ILCode.Await, null, awaitedExpr);
+ }
+
+ // if the awaiter variable is cleared out in the next instruction, remove that instruction
+ if (IsVariableReset(body.ElementAtOrDefault(pos + 1), awaiterVar)) {
+ body.RemoveAt(pos + 1);
+ }
+
+ return true;
+ }
+
+ static bool IsVariableReset(ILNode expr, ILVariable variable)
+ {
+ object unused;
+ ILExpression ldloca;
+ return expr.Match(ILCode.Initobj, out unused, out ldloca) && ldloca.MatchLdloca(variable);
+ }
+ #endregion
+ }
+}
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs
index 051662f357..bf85ca94f4 100644
--- a/src/Libraries/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/ILAstOptimizer.cs
@@ -35,6 +35,7 @@ namespace ICSharpCode.Decompiler.ILAst
InlineVariables,
CopyPropagation,
YieldReturn,
+ AsyncAwait,
PropertyAccessInstructions,
SplitToMovableBlocks,
TypeInference,
@@ -107,6 +108,10 @@ namespace ICSharpCode.Decompiler.ILAst
if (abortBeforeStep == ILAstOptimizationStep.YieldReturn) return;
YieldReturnDecompiler.Run(context, method);
+ AsyncDecompiler.RunStep1(context, method);
+
+ if (abortBeforeStep == ILAstOptimizationStep.AsyncAwait) return;
+ AsyncDecompiler.RunStep2(context, method);
if (abortBeforeStep == ILAstOptimizationStep.PropertyAccessInstructions) return;
IntroducePropertyAccessInstructions(method);
@@ -256,7 +261,7 @@ namespace ICSharpCode.Decompiler.ILAst
/// Ignore arguments of 'leave'
///
///
- void RemoveRedundantCode(ILBlock method)
+ internal static void RemoveRedundantCode(ILBlock method)
{
Dictionary labelRefCount = new Dictionary();
foreach (ILLabel target in method.GetSelfAndChildrenRecursive(e => e.IsBranch()).SelectMany(e => e.GetBranchTargets())) {
@@ -286,7 +291,13 @@ namespace ICSharpCode.Decompiler.ILAst
prevExpr.ILRanges.AddRange(((ILExpression)body[i]).ILRanges);
// Ignore pop
} else {
- newBody.Add(body[i]);
+ ILLabel label = body[i] as ILLabel;
+ if (label != null) {
+ if (labelRefCount.GetOrDefault(label) > 0)
+ newBody.Add(label);
+ } else {
+ newBody.Add(body[i]);
+ }
}
}
block.Body = newBody;
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/ILCodes.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/ILCodes.cs
index cbf5486988..5ca063b752 100644
--- a/src/Libraries/ICSharpCode.Decompiler/ILAst/ILCodes.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/ILCodes.cs
@@ -333,7 +333,11 @@ namespace ICSharpCode.Decompiler.ILAst
/// The last child of this node is the call constructing the expression tree, all other children are the
/// assignments to the ParameterExpression variables.
///
- ExpressionTreeParameterDeclarations
+ ExpressionTreeParameterDeclarations,
+ ///
+ /// C# 5 await
+ ///
+ Await
}
public static class ILCodeUtil
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/PatternMatching.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/PatternMatching.cs
index cc4e5ee5f5..31fcf62b15 100644
--- a/src/Libraries/ICSharpCode.Decompiler/ILAst/PatternMatching.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/PatternMatching.cs
@@ -155,5 +155,17 @@ namespace ICSharpCode.Decompiler.ILAst
ILVariable v;
return node.Match(ILCode.Ldloc, out v) && v == expectedVar;
}
+
+ public static bool MatchLdloca(this ILNode node, ILVariable expectedVar)
+ {
+ ILVariable v;
+ return node.Match(ILCode.Ldloca, out v) && v == expectedVar;
+ }
+
+ public static bool MatchStloc(this ILNode node, ILVariable expectedVar, out ILExpression expr)
+ {
+ ILVariable v;
+ return node.Match(ILCode.Stloc, out v, out expr) && v == expectedVar;
+ }
}
}
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/StateRange.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/StateRange.cs
new file mode 100644
index 0000000000..4a55e1d0b6
--- /dev/null
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/StateRange.cs
@@ -0,0 +1,310 @@
+// Copyright (c) 2012 AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using Mono.Cecil;
+
+namespace ICSharpCode.Decompiler.ILAst
+{
+ struct Interval
+ {
+ public readonly int Start, End;
+
+ public Interval(int start, int end)
+ {
+ Debug.Assert(start <= end || (start == 0 && end == -1));
+ this.Start = start;
+ this.End = end;
+ }
+
+ public override string ToString()
+ {
+ return string.Format("({0} to {1})", Start, End);
+ }
+ }
+
+ class StateRange
+ {
+ readonly List data = new List();
+
+ public StateRange()
+ {
+ }
+
+ public StateRange(int start, int end)
+ {
+ this.data.Add(new Interval(start, end));
+ }
+
+ public bool IsEmpty {
+ get { return data.Count == 0; }
+ }
+
+ public bool Contains(int val)
+ {
+ foreach (Interval v in data) {
+ if (v.Start <= val && val <= v.End)
+ return true;
+ }
+ return false;
+ }
+
+ public void UnionWith(StateRange other)
+ {
+ data.AddRange(other.data);
+ }
+
+ ///
+ /// Unions this state range with (other intersect (minVal to maxVal))
+ ///
+ public void UnionWith(StateRange other, int minVal, int maxVal)
+ {
+ foreach (Interval v in other.data) {
+ int start = Math.Max(v.Start, minVal);
+ int end = Math.Min(v.End, maxVal);
+ if (start <= end)
+ data.Add(new Interval(start, end));
+ }
+ }
+
+ ///
+ /// Merges overlapping interval ranges.
+ ///
+ public void Simplify()
+ {
+ if (data.Count < 2)
+ return;
+ data.Sort((a, b) => a.Start.CompareTo(b.Start));
+ Interval prev = data[0];
+ int prevIndex = 0;
+ for (int i = 1; i < data.Count; i++) {
+ Interval next = data[i];
+ Debug.Assert(prev.Start <= next.Start);
+ if (next.Start <= prev.End + 1) { // intervals overlapping or touching
+ prev = new Interval(prev.Start, Math.Max(prev.End, next.End));
+ data[prevIndex] = prev;
+ data[i] = new Interval(0, -1); // mark as deleted
+ } else {
+ prev = next;
+ prevIndex = i;
+ }
+ }
+ data.RemoveAll(i => i.Start > i.End); // remove all entries that were marked as deleted
+ }
+
+ public override string ToString()
+ {
+ return string.Join(",", data);
+ }
+
+ public Interval ToEnclosingInterval()
+ {
+ if (data.Count == 0)
+ throw new SymbolicAnalysisFailedException();
+ return new Interval(data[0].Start, data[data.Count - 1].End);
+ }
+ }
+
+ enum StateRangeAnalysisMode
+ {
+ IteratorMoveNext,
+ IteratorDispose,
+ AsyncMoveNext
+ }
+
+ class StateRangeAnalysis
+ {
+ readonly StateRangeAnalysisMode mode;
+ readonly FieldDefinition stateField;
+ internal DefaultDictionary ranges;
+ SymbolicEvaluationContext evalContext;
+
+ internal Dictionary finallyMethodToStateInterval; // used only for IteratorDispose
+
+ ///
+ /// Initializes the state range logic:
+ /// Clears 'ranges' and sets 'ranges[entryPoint]' to the full range (int.MinValue to int.MaxValue)
+ ///
+ public StateRangeAnalysis(ILNode entryPoint, StateRangeAnalysisMode mode, FieldDefinition stateField)
+ {
+ this.mode = mode;
+ this.stateField = stateField;
+ if (mode == StateRangeAnalysisMode.IteratorDispose) {
+ finallyMethodToStateInterval = new Dictionary();
+ }
+
+ ranges = new DefaultDictionary(n => new StateRange());
+ ranges[entryPoint] = new StateRange(int.MinValue, int.MaxValue);
+ evalContext = new SymbolicEvaluationContext(stateField);
+ }
+
+ public int AssignStateRanges(List body, int bodyLength)
+ {
+ if (bodyLength == 0)
+ return 0;
+ for (int i = 0; i < bodyLength; i++) {
+ StateRange nodeRange = ranges[body[i]];
+ nodeRange.Simplify();
+
+ ILLabel label = body[i] as ILLabel;
+ if (label != null) {
+ ranges[body[i + 1]].UnionWith(nodeRange);
+ continue;
+ }
+
+ ILTryCatchBlock tryFinally = body[i] as ILTryCatchBlock;
+ if (tryFinally != null) {
+ if (mode == StateRangeAnalysisMode.IteratorDispose) {
+ if (tryFinally.CatchBlocks.Count != 0 || tryFinally.FaultBlock != null || tryFinally.FinallyBlock == null)
+ throw new SymbolicAnalysisFailedException();
+ ranges[tryFinally.TryBlock].UnionWith(nodeRange);
+ if (tryFinally.TryBlock.Body.Count != 0) {
+ ranges[tryFinally.TryBlock.Body[0]].UnionWith(nodeRange);
+ AssignStateRanges(tryFinally.TryBlock.Body, tryFinally.TryBlock.Body.Count);
+ }
+ continue;
+ } else if (mode == StateRangeAnalysisMode.AsyncMoveNext) {
+ return i;
+ } else {
+ throw new SymbolicAnalysisFailedException();
+ }
+ }
+
+ ILExpression expr = body[i] as ILExpression;
+ if (expr == null)
+ throw new SymbolicAnalysisFailedException();
+ switch (expr.Code) {
+ case ILCode.Switch:
+ {
+ SymbolicValue val = evalContext.Eval(expr.Arguments[0]);
+ if (val.Type != SymbolicValueType.State)
+ goto default;
+ ILLabel[] targetLabels = (ILLabel[])expr.Operand;
+ for (int j = 0; j < targetLabels.Length; j++) {
+ int state = j - val.Constant;
+ ranges[targetLabels[j]].UnionWith(nodeRange, state, state);
+ }
+ StateRange nextRange = ranges[body[i + 1]];
+ nextRange.UnionWith(nodeRange, int.MinValue, -1 - val.Constant);
+ nextRange.UnionWith(nodeRange, targetLabels.Length - val.Constant, int.MaxValue);
+ break;
+ }
+ case ILCode.Br:
+ case ILCode.Leave:
+ ranges[(ILLabel)expr.Operand].UnionWith(nodeRange);
+ break;
+ case ILCode.Brtrue:
+ {
+ SymbolicValue val = evalContext.Eval(expr.Arguments[0]);
+ if (val.Type == SymbolicValueType.StateEquals) {
+ ranges[(ILLabel)expr.Operand].UnionWith(nodeRange, val.Constant, val.Constant);
+ StateRange nextRange = ranges[body[i + 1]];
+ nextRange.UnionWith(nodeRange, int.MinValue, val.Constant - 1);
+ nextRange.UnionWith(nodeRange, val.Constant + 1, int.MaxValue);
+ break;
+ } else if (val.Type == SymbolicValueType.StateInEquals) {
+ ranges[body[i + 1]].UnionWith(nodeRange, val.Constant, val.Constant);
+ StateRange targetRange = ranges[(ILLabel)expr.Operand];
+ targetRange.UnionWith(nodeRange, int.MinValue, val.Constant - 1);
+ targetRange.UnionWith(nodeRange, val.Constant + 1, int.MaxValue);
+ break;
+ } else {
+ goto default;
+ }
+ }
+ case ILCode.Nop:
+ ranges[body[i + 1]].UnionWith(nodeRange);
+ break;
+ case ILCode.Ret:
+ break;
+ case ILCode.Stloc:
+ {
+ SymbolicValue val = evalContext.Eval(expr.Arguments[0]);
+ if (val.Type == SymbolicValueType.State && val.Constant == 0) {
+ evalContext.AddStateVariable((ILVariable)expr.Operand);
+ goto case ILCode.Nop;
+ } else {
+ goto default;
+ }
+ }
+ case ILCode.Call:
+ // in some cases (e.g. foreach over array) the C# compiler produces a finally method outside of try-finally blocks
+ if (mode == StateRangeAnalysisMode.IteratorDispose) {
+ MethodDefinition mdef = (expr.Operand as MethodReference).ResolveWithinSameModule();
+ if (mdef == null || finallyMethodToStateInterval.ContainsKey(mdef))
+ throw new SymbolicAnalysisFailedException();
+ finallyMethodToStateInterval.Add(mdef, nodeRange.ToEnclosingInterval());
+ break;
+ } else {
+ goto default;
+ }
+ default:
+ if (mode == StateRangeAnalysisMode.IteratorDispose) {
+ throw new SymbolicAnalysisFailedException();
+ } else {
+ return i;
+ }
+ }
+ }
+ return bodyLength;
+ }
+
+ public void EnsureLabelAtPos(List body, ref int pos, ref int bodyLength)
+ {
+ if (pos > 0 && body[pos - 1] is ILLabel) {
+ pos--;
+ } else {
+ // ensure that the first element at body[pos] is a label:
+ ILLabel newLabel = new ILLabel();
+ newLabel.Name = "YieldReturnEntryPoint";
+ ranges[newLabel] = ranges[body[pos]]; // give the label the range of the instruction at body[pos]
+ body.Insert(pos, newLabel);
+ bodyLength++;
+ }
+ }
+
+ public LabelRangeMapping CreateLabelRangeMapping(List body, int pos, int bodyLength)
+ {
+ LabelRangeMapping result = new LabelRangeMapping();
+ CreateLabelRangeMapping(body, pos, bodyLength, result, false);
+ return result;
+ }
+
+ void CreateLabelRangeMapping(List body, int pos, int bodyLength, LabelRangeMapping result, bool onlyInitialLabels)
+ {
+ for (int i = pos; i < bodyLength; i++) {
+ ILLabel label = body[i] as ILLabel;
+ if (label != null) {
+ result.Add(new KeyValuePair(label, ranges[label]));
+ } else {
+ ILTryCatchBlock tryCatchBlock = body[i] as ILTryCatchBlock;
+ if (tryCatchBlock != null) {
+ CreateLabelRangeMapping(tryCatchBlock.TryBlock.Body, 0, tryCatchBlock.TryBlock.Body.Count, result, true);
+ } else if (onlyInitialLabels) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ class LabelRangeMapping : List> {}
+}
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/SymbolicExecution.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/SymbolicExecution.cs
new file mode 100644
index 0000000000..98255f2f2d
--- /dev/null
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/SymbolicExecution.cs
@@ -0,0 +1,148 @@
+// Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using Mono.Cecil;
+
+namespace ICSharpCode.Decompiler.ILAst
+{
+ ///
+ /// This exception is thrown when we find something else than we expect from the C# compiler.
+ /// This aborts the analysis and makes the whole transform fail.
+ ///
+ class SymbolicAnalysisFailedException : Exception {}
+
+ enum SymbolicValueType
+ {
+ ///
+ /// Unknown value
+ ///
+ Unknown,
+ ///
+ /// int: Constant (result of ldc.i4)
+ ///
+ IntegerConstant,
+ ///
+ /// int: State + Constant
+ ///
+ State,
+ ///
+ /// This pointer (result of ldarg.0)
+ ///
+ This,
+ ///
+ /// bool: State == Constant
+ ///
+ StateEquals,
+ ///
+ /// bool: State != Constant
+ ///
+ StateInEquals
+ }
+
+ struct SymbolicValue
+ {
+ public readonly int Constant;
+ public readonly SymbolicValueType Type;
+
+ public SymbolicValue(SymbolicValueType type, int constant = 0)
+ {
+ this.Type = type;
+ this.Constant = constant;
+ }
+
+ public override string ToString()
+ {
+ return string.Format("[SymbolicValue {0}: {1}]", this.Type, this.Constant);
+ }
+ }
+
+ class SymbolicEvaluationContext
+ {
+ readonly FieldDefinition stateField;
+ readonly List stateVariables = new List();
+
+ public SymbolicEvaluationContext(FieldDefinition stateField)
+ {
+ this.stateField = stateField;
+ }
+
+ public void AddStateVariable(ILVariable v)
+ {
+ if (!stateVariables.Contains(v))
+ stateVariables.Add(v);
+ }
+
+ SymbolicValue Failed()
+ {
+ return new SymbolicValue(SymbolicValueType.Unknown);
+ }
+
+ public SymbolicValue Eval(ILExpression expr)
+ {
+ SymbolicValue left, right;
+ switch (expr.Code) {
+ case ILCode.Sub:
+ left = Eval(expr.Arguments[0]);
+ right = Eval(expr.Arguments[1]);
+ if (left.Type != SymbolicValueType.State && left.Type != SymbolicValueType.IntegerConstant)
+ return Failed();
+ if (right.Type != SymbolicValueType.IntegerConstant)
+ return Failed();
+ return new SymbolicValue(left.Type, unchecked ( left.Constant - right.Constant ));
+ case ILCode.Ldfld:
+ if (Eval(expr.Arguments[0]).Type != SymbolicValueType.This)
+ return Failed();
+ if (CecilExtensions.ResolveWithinSameModule(expr.Operand as FieldReference) != stateField)
+ return Failed();
+ return new SymbolicValue(SymbolicValueType.State);
+ case ILCode.Ldloc:
+ ILVariable loadedVariable = (ILVariable)expr.Operand;
+ if (stateVariables.Contains(loadedVariable))
+ return new SymbolicValue(SymbolicValueType.State);
+ else if (loadedVariable.IsParameter && loadedVariable.OriginalParameter.Index < 0)
+ return new SymbolicValue(SymbolicValueType.This);
+ else
+ return Failed();
+ case ILCode.Ldc_I4:
+ return new SymbolicValue(SymbolicValueType.IntegerConstant, (int)expr.Operand);
+ case ILCode.Ceq:
+ case ILCode.Cne:
+ left = Eval(expr.Arguments[0]);
+ right = Eval(expr.Arguments[1]);
+ if (left.Type != SymbolicValueType.State || right.Type != SymbolicValueType.IntegerConstant)
+ return Failed();
+ // bool: (state + left.Constant == right.Constant)
+ // bool: (state == right.Constant - left.Constant)
+ return new SymbolicValue(expr.Code == ILCode.Ceq ? SymbolicValueType.StateEquals : SymbolicValueType.StateInEquals, unchecked(right.Constant - left.Constant));
+ case ILCode.LogicNot:
+ SymbolicValue val = Eval(expr.Arguments[0]);
+ if (val.Type == SymbolicValueType.StateEquals)
+ return new SymbolicValue(SymbolicValueType.StateInEquals, val.Constant);
+ else if (val.Type == SymbolicValueType.StateInEquals)
+ return new SymbolicValue(SymbolicValueType.StateEquals, val.Constant);
+ else
+ return Failed();
+ default:
+ return Failed();
+ }
+ }
+ }
+}
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs
index 6e8444a1ca..2e46e285bf 100644
--- a/src/Libraries/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs
@@ -790,8 +790,17 @@ namespace ICSharpCode.Decompiler.ILAst
case ILCode.YieldBreak:
return null;
case ILCode.Ret:
- if (forceInferChildren && expr.Arguments.Count == 1)
- InferTypeForExpression(expr.Arguments[0], context.CurrentMethod.ReturnType);
+ if (forceInferChildren && expr.Arguments.Count == 1) {
+ TypeReference returnType = context.CurrentMethod.ReturnType;
+ if (context.CurrentMethodIsAsync && returnType != null && returnType.Namespace == "System.Threading.Tasks") {
+ if (returnType.Name == "Task") {
+ returnType = typeSystem.Void;
+ } else if (returnType.Name == "Task`1" && returnType.IsGenericInstance) {
+ returnType = ((GenericInstanceType)returnType).GenericArguments[0];
+ }
+ }
+ InferTypeForExpression(expr.Arguments[0], returnType);
+ }
return null;
case ILCode.YieldReturn:
if (forceInferChildren) {
@@ -803,6 +812,14 @@ namespace ICSharpCode.Decompiler.ILAst
}
}
return null;
+ case ILCode.Await:
+ {
+ TypeReference taskType = InferTypeForExpression(expr.Arguments[0], null);
+ if (taskType.Name == "Task`1" && taskType.IsGenericInstance && taskType.Namespace == "System.Threading.Tasks") {
+ return ((GenericInstanceType)taskType).GenericArguments[0];
+ }
+ return null;
+ }
#endregion
case ILCode.Pop:
return null;
diff --git a/src/Libraries/ICSharpCode.Decompiler/ILAst/YieldReturnDecompiler.cs b/src/Libraries/ICSharpCode.Decompiler/ILAst/YieldReturnDecompiler.cs
index 06a211eea8..b4b6183bf8 100644
--- a/src/Libraries/ICSharpCode.Decompiler/ILAst/YieldReturnDecompiler.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/ILAst/YieldReturnDecompiler.cs
@@ -24,7 +24,7 @@ using Mono.Cecil;
namespace ICSharpCode.Decompiler.ILAst
{
- public class YieldReturnDecompiler
+ class YieldReturnDecompiler
{
// For a description on the code generated by the C# compiler for yield return:
// http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx
@@ -34,11 +34,8 @@ namespace ICSharpCode.Decompiler.ILAst
// - Figure out which of the fields is the state field
// - Construct an exception table based on states. This allows us to determine, for each state, what the parent try block is.
- ///
- /// This exception is thrown when we find something else than we expect from the C# compiler.
- /// This aborts the analysis and makes the whole transform fail.
- ///
- class YieldAnalysisFailedException : Exception {}
+ // See http://community.sharpdevelop.net/blogs/danielgrunwald/archive/2011/03/06/ilspy-yield-return.aspx
+ // for a description of this step.
DecompilerContext context;
TypeDefinition enumeratorType;
@@ -66,7 +63,7 @@ namespace ICSharpCode.Decompiler.ILAst
#endif
try {
yrd.Run();
- } catch (YieldAnalysisFailedException) {
+ } catch (SymbolicAnalysisFailedException) {
return;
}
#if DEBUG
@@ -211,7 +208,7 @@ namespace ICSharpCode.Decompiler.ILAst
}
}
if (stateField == null)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
}
///
@@ -220,7 +217,7 @@ namespace ICSharpCode.Decompiler.ILAst
ILBlock CreateILAst(MethodDefinition method)
{
if (method == null || !method.HasBody)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
ILBlock ilMethod = new ILBlock();
ILAstBuilder astBuilder = new ILAstBuilder();
@@ -269,7 +266,7 @@ namespace ICSharpCode.Decompiler.ILAst
}
}
if (currentField == null)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
}
#endregion
@@ -322,337 +319,30 @@ namespace ICSharpCode.Decompiler.ILAst
disposeMethod = enumeratorType.Methods.FirstOrDefault(m => m.Name == "System.IDisposable.Dispose");
ILBlock ilMethod = CreateILAst(disposeMethod);
- finallyMethodToStateInterval = new Dictionary();
-
- InitStateRanges(ilMethod.Body[0]);
- AssignStateRanges(ilMethod.Body, ilMethod.Body.Count, forDispose: true);
+ var rangeAnalysis = new StateRangeAnalysis(ilMethod.Body[0], StateRangeAnalysisMode.IteratorDispose, stateField);
+ rangeAnalysis.AssignStateRanges(ilMethod.Body, ilMethod.Body.Count);
+ finallyMethodToStateInterval = rangeAnalysis.finallyMethodToStateInterval;
// Now look at the finally blocks:
foreach (var tryFinally in ilMethod.GetSelfAndChildrenRecursive()) {
- Interval interval = ranges[tryFinally.TryBlock.Body[0]].ToEnclosingInterval();
+ Interval interval = rangeAnalysis.ranges[tryFinally.TryBlock.Body[0]].ToEnclosingInterval();
var finallyBody = tryFinally.FinallyBlock.Body;
if (finallyBody.Count != 2)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
ILExpression call = finallyBody[0] as ILExpression;
if (call == null || call.Code != ILCode.Call || call.Arguments.Count != 1)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
if (!call.Arguments[0].MatchThis())
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
if (!finallyBody[1].Match(ILCode.Endfinally))
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
MethodDefinition mdef = GetMethodDefinition(call.Operand as MethodReference);
if (mdef == null || finallyMethodToStateInterval.ContainsKey(mdef))
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
finallyMethodToStateInterval.Add(mdef, interval);
}
- ranges = null;
- }
- #endregion
-
- #region Assign StateRanges / Symbolic Execution (used for analysis of Dispose() and MoveNext())
- #region struct Interval / class StateRange
- struct Interval
- {
- public readonly int Start, End;
-
- public Interval(int start, int end)
- {
- Debug.Assert(start <= end || (start == 0 && end == -1));
- this.Start = start;
- this.End = end;
- }
-
- public override string ToString()
- {
- return string.Format("({0} to {1})", Start, End);
- }
- }
-
- class StateRange
- {
- readonly List data = new List();
-
- public StateRange()
- {
- }
-
- public StateRange(int start, int end)
- {
- this.data.Add(new Interval(start, end));
- }
-
- public bool Contains(int val)
- {
- foreach (Interval v in data) {
- if (v.Start <= val && val <= v.End)
- return true;
- }
- return false;
- }
-
- public void UnionWith(StateRange other)
- {
- data.AddRange(other.data);
- }
-
- ///
- /// Unions this state range with (other intersect (minVal to maxVal))
- ///
- public void UnionWith(StateRange other, int minVal, int maxVal)
- {
- foreach (Interval v in other.data) {
- int start = Math.Max(v.Start, minVal);
- int end = Math.Min(v.End, maxVal);
- if (start <= end)
- data.Add(new Interval(start, end));
- }
- }
-
- ///
- /// Merges overlapping interval ranges.
- ///
- public void Simplify()
- {
- if (data.Count < 2)
- return;
- data.Sort((a, b) => a.Start.CompareTo(b.Start));
- Interval prev = data[0];
- int prevIndex = 0;
- for (int i = 1; i < data.Count; i++) {
- Interval next = data[i];
- Debug.Assert(prev.Start <= next.Start);
- if (next.Start <= prev.End + 1) { // intervals overlapping or touching
- prev = new Interval(prev.Start, Math.Max(prev.End, next.End));
- data[prevIndex] = prev;
- data[i] = new Interval(0, -1); // mark as deleted
- } else {
- prev = next;
- prevIndex = i;
- }
- }
- data.RemoveAll(i => i.Start > i.End); // remove all entries that were marked as deleted
- }
-
- public override string ToString()
- {
- return string.Join(",", data);
- }
-
- public Interval ToEnclosingInterval()
- {
- if (data.Count == 0)
- throw new YieldAnalysisFailedException();
- return new Interval(data[0].Start, data[data.Count - 1].End);
- }
- }
- #endregion
-
- DefaultDictionary ranges;
- ILVariable rangeAnalysisStateVariable;
-
- ///
- /// Initializes the state range logic:
- /// Clears 'ranges' and sets 'ranges[entryPoint]' to the full range (int.MinValue to int.MaxValue)
- ///
- void InitStateRanges(ILNode entryPoint)
- {
- ranges = new DefaultDictionary(n => new StateRange());
- ranges[entryPoint] = new StateRange(int.MinValue, int.MaxValue);
- rangeAnalysisStateVariable = null;
- }
-
- int AssignStateRanges(List body, int bodyLength, bool forDispose)
- {
- if (bodyLength == 0)
- return 0;
- for (int i = 0; i < bodyLength; i++) {
- StateRange nodeRange = ranges[body[i]];
- nodeRange.Simplify();
-
- ILLabel label = body[i] as ILLabel;
- if (label != null) {
- ranges[body[i + 1]].UnionWith(nodeRange);
- continue;
- }
-
- ILTryCatchBlock tryFinally = body[i] as ILTryCatchBlock;
- if (tryFinally != null) {
- if (!forDispose || tryFinally.CatchBlocks.Count != 0 || tryFinally.FaultBlock != null || tryFinally.FinallyBlock == null)
- throw new YieldAnalysisFailedException();
- ranges[tryFinally.TryBlock].UnionWith(nodeRange);
- if (tryFinally.TryBlock.Body.Count != 0) {
- ranges[tryFinally.TryBlock.Body[0]].UnionWith(nodeRange);
- AssignStateRanges(tryFinally.TryBlock.Body, tryFinally.TryBlock.Body.Count, forDispose);
- }
- continue;
- }
-
- ILExpression expr = body[i] as ILExpression;
- if (expr == null)
- throw new YieldAnalysisFailedException();
- switch (expr.Code) {
- case ILCode.Switch:
- {
- SymbolicValue val = Eval(expr.Arguments[0]);
- if (val.Type != SymbolicValueType.State)
- throw new YieldAnalysisFailedException();
- ILLabel[] targetLabels = (ILLabel[])expr.Operand;
- for (int j = 0; j < targetLabels.Length; j++) {
- int state = j - val.Constant;
- ranges[targetLabels[j]].UnionWith(nodeRange, state, state);
- }
- StateRange nextRange = ranges[body[i + 1]];
- nextRange.UnionWith(nodeRange, int.MinValue, -1 - val.Constant);
- nextRange.UnionWith(nodeRange, targetLabels.Length - val.Constant, int.MaxValue);
- break;
- }
- case ILCode.Br:
- case ILCode.Leave:
- ranges[(ILLabel)expr.Operand].UnionWith(nodeRange);
- break;
- case ILCode.Brtrue:
- {
- SymbolicValue val = Eval(expr.Arguments[0]);
- if (val.Type == SymbolicValueType.StateEquals) {
- ranges[(ILLabel)expr.Operand].UnionWith(nodeRange, val.Constant, val.Constant);
- StateRange nextRange = ranges[body[i + 1]];
- nextRange.UnionWith(nodeRange, int.MinValue, val.Constant - 1);
- nextRange.UnionWith(nodeRange, val.Constant + 1, int.MaxValue);
- } else if (val.Type == SymbolicValueType.StateInEquals) {
- ranges[body[i + 1]].UnionWith(nodeRange, val.Constant, val.Constant);
- StateRange targetRange = ranges[(ILLabel)expr.Operand];
- targetRange.UnionWith(nodeRange, int.MinValue, val.Constant - 1);
- targetRange.UnionWith(nodeRange, val.Constant + 1, int.MaxValue);
- } else {
- throw new YieldAnalysisFailedException();
- }
- break;
- }
- case ILCode.Nop:
- ranges[body[i + 1]].UnionWith(nodeRange);
- break;
- case ILCode.Ret:
- break;
- case ILCode.Stloc:
- {
- SymbolicValue val = Eval(expr.Arguments[0]);
- if (val.Type == SymbolicValueType.State && val.Constant == 0 && rangeAnalysisStateVariable == null)
- rangeAnalysisStateVariable = (ILVariable)expr.Operand;
- else
- throw new YieldAnalysisFailedException();
- goto case ILCode.Nop;
- }
- case ILCode.Call:
- // in some cases (e.g. foreach over array) the C# compiler produces a finally method outside of try-finally blocks
- if (forDispose) {
- MethodDefinition mdef = GetMethodDefinition(expr.Operand as MethodReference);
- if (mdef == null || finallyMethodToStateInterval.ContainsKey(mdef))
- throw new YieldAnalysisFailedException();
- finallyMethodToStateInterval.Add(mdef, nodeRange.ToEnclosingInterval());
- } else {
- throw new YieldAnalysisFailedException();
- }
- break;
- default:
- if (forDispose)
- throw new YieldAnalysisFailedException();
- else
- return i;
- }
- }
- return bodyLength;
- }
-
- enum SymbolicValueType
- {
- ///
- /// int: Constant (result of ldc.i4)
- ///
- IntegerConstant,
- ///
- /// int: State + Constant
- ///
- State,
- ///
- /// This pointer (result of ldarg.0)
- ///
- This,
- ///
- /// bool: State == Constant
- ///
- StateEquals,
- ///
- /// bool: State != Constant
- ///
- StateInEquals
- }
-
- struct SymbolicValue
- {
- public readonly int Constant;
- public readonly SymbolicValueType Type;
-
- public SymbolicValue(SymbolicValueType type, int constant = 0)
- {
- this.Type = type;
- this.Constant = constant;
- }
-
- public override string ToString()
- {
- return string.Format("[SymbolicValue {0}: {1}]", this.Type, this.Constant);
- }
- }
-
- SymbolicValue Eval(ILExpression expr)
- {
- SymbolicValue left, right;
- switch (expr.Code) {
- case ILCode.Sub:
- left = Eval(expr.Arguments[0]);
- right = Eval(expr.Arguments[1]);
- if (left.Type != SymbolicValueType.State && left.Type != SymbolicValueType.IntegerConstant)
- throw new YieldAnalysisFailedException();
- if (right.Type != SymbolicValueType.IntegerConstant)
- throw new YieldAnalysisFailedException();
- return new SymbolicValue(left.Type, unchecked ( left.Constant - right.Constant ));
- case ILCode.Ldfld:
- if (Eval(expr.Arguments[0]).Type != SymbolicValueType.This)
- throw new YieldAnalysisFailedException();
- if (GetFieldDefinition(expr.Operand as FieldReference) != stateField)
- throw new YieldAnalysisFailedException();
- return new SymbolicValue(SymbolicValueType.State);
- case ILCode.Ldloc:
- ILVariable loadedVariable = (ILVariable)expr.Operand;
- if (loadedVariable == rangeAnalysisStateVariable)
- return new SymbolicValue(SymbolicValueType.State);
- else if (loadedVariable.IsParameter && loadedVariable.OriginalParameter.Index < 0)
- return new SymbolicValue(SymbolicValueType.This);
- else
- throw new YieldAnalysisFailedException();
- case ILCode.Ldc_I4:
- return new SymbolicValue(SymbolicValueType.IntegerConstant, (int)expr.Operand);
- case ILCode.Ceq:
- case ILCode.Cne:
- left = Eval(expr.Arguments[0]);
- right = Eval(expr.Arguments[1]);
- if (left.Type != SymbolicValueType.State || right.Type != SymbolicValueType.IntegerConstant)
- throw new YieldAnalysisFailedException();
- // bool: (state + left.Constant == right.Constant)
- // bool: (state == right.Constant - left.Constant)
- return new SymbolicValue(expr.Code == ILCode.Ceq ? SymbolicValueType.StateEquals : SymbolicValueType.StateInEquals, unchecked(right.Constant - left.Constant));
- case ILCode.LogicNot:
- SymbolicValue val = Eval(expr.Arguments[0]);
- if (val.Type == SymbolicValueType.StateEquals)
- return new SymbolicValue(SymbolicValueType.StateInEquals, val.Constant);
- else if (val.Type == SymbolicValueType.StateInEquals)
- return new SymbolicValue(SymbolicValueType.StateEquals, val.Constant);
- else
- throw new YieldAnalysisFailedException();
- default:
- throw new YieldAnalysisFailedException();
- }
+ rangeAnalysis = null;
}
#endregion
@@ -667,10 +357,10 @@ namespace ICSharpCode.Decompiler.ILAst
ILBlock ilMethod = CreateILAst(moveNextMethod);
if (ilMethod.Body.Count == 0)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
ILExpression lastReturnArg;
if (!ilMethod.Body.Last().Match(ILCode.Ret, out lastReturnArg))
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
// There are two possibilities:
if (lastReturnArg.Code == ILCode.Ldloc) {
@@ -678,14 +368,14 @@ namespace ICSharpCode.Decompiler.ILAst
returnVariable = (ILVariable)lastReturnArg.Operand;
returnLabel = ilMethod.Body.ElementAtOrDefault(ilMethod.Body.Count - 2) as ILLabel;
if (returnLabel == null)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
} else {
// b) the compiler directly returns constants
returnVariable = null;
returnLabel = null;
// In this case, the last return must return false.
if (lastReturnArg.Code != ILCode.Ldc_I4 || (int)lastReturnArg.Operand != 0)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
}
ILTryCatchBlock tryFaultBlock = ilMethod.Body[0] as ILTryCatchBlock;
@@ -694,23 +384,23 @@ namespace ICSharpCode.Decompiler.ILAst
if (tryFaultBlock != null) {
// there are try-finally blocks
if (returnVariable == null) // in this case, we must use a return variable
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
// must be a try-fault block:
if (tryFaultBlock.CatchBlocks.Count != 0 || tryFaultBlock.FinallyBlock != null || tryFaultBlock.FaultBlock == null)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
ILBlock faultBlock = tryFaultBlock.FaultBlock;
// Ensure the fault block contains the call to Dispose().
if (faultBlock.Body.Count != 2)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
MethodReference disposeMethodRef;
ILExpression disposeArg;
if (!faultBlock.Body[0].Match(ILCode.Call, out disposeMethodRef, out disposeArg))
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
if (GetMethodDefinition(disposeMethodRef) != disposeMethod || !disposeArg.MatchThis())
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
if (!faultBlock.Body[1].Match(ILCode.Endfinally))
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
body = tryFaultBlock.TryBlock.Body;
bodyLength = body.Count;
@@ -734,39 +424,22 @@ namespace ICSharpCode.Decompiler.ILAst
bodyLength--;
ILExpression store0 = body.ElementAtOrDefault(bodyLength - 1) as ILExpression;
if (store0 == null || store0.Code != ILCode.Stloc || store0.Operand != returnVariable)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
if (store0.Arguments[0].Code != ILCode.Ldc_I4 || (int)store0.Arguments[0].Operand != 0)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
bodyLength--; // don't conside the stloc instruction to be part of the body
}
// verify that the last element in the body is a label pointing to the 'ret(false)'
returnFalseLabel = body.ElementAtOrDefault(bodyLength - 1) as ILLabel;
if (returnFalseLabel == null)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
- InitStateRanges(body[0]);
- int pos = AssignStateRanges(body, bodyLength, forDispose: false);
- if (pos > 0 && body[pos - 1] is ILLabel) {
- pos--;
- } else {
- // ensure that the first element at body[pos] is a label:
- ILLabel newLabel = new ILLabel();
- newLabel.Name = "YieldReturnEntryPoint";
- ranges[newLabel] = ranges[body[pos]]; // give the label the range of the instruction at body[pos]
-
- body.Insert(pos, newLabel);
- bodyLength++;
- }
-
- List> labels = new List>();
- for (int i = pos; i < bodyLength; i++) {
- ILLabel label = body[i] as ILLabel;
- if (label != null) {
- labels.Add(new KeyValuePair(label, ranges[label]));
- }
- }
+ var rangeAnalysis = new StateRangeAnalysis(body[0], StateRangeAnalysisMode.IteratorMoveNext, stateField);
+ int pos = rangeAnalysis.AssignStateRanges(body, bodyLength);
+ rangeAnalysis.EnsureLabelAtPos(body, ref pos, ref bodyLength);
+ var labels = rangeAnalysis.CreateLabelRangeMapping(body, pos, bodyLength);
ConvertBody(body, pos, bodyLength, labels);
}
#endregion
@@ -797,7 +470,7 @@ namespace ICSharpCode.Decompiler.ILAst
// Handle stores to 'state' or 'current'
if (GetFieldDefinition(expr.Operand as FieldReference) == stateField) {
if (expr.Arguments[1].Code != ILCode.Ldc_I4)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
currentState = (int)expr.Arguments[1].Operand;
stateChanges.Add(new SetState(newBody.Count, currentState));
} else if (GetFieldDefinition(expr.Operand as FieldReference) == currentField) {
@@ -809,18 +482,18 @@ namespace ICSharpCode.Decompiler.ILAst
// handle store+branch to the returnVariable
ILExpression br = body.ElementAtOrDefault(++pos) as ILExpression;
if (br == null || !(br.Code == ILCode.Br || br.Code == ILCode.Leave) || br.Operand != returnLabel || expr.Arguments[0].Code != ILCode.Ldc_I4)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
int val = (int)expr.Arguments[0].Operand;
if (val == 0) {
newBody.Add(MakeGoTo(returnFalseLabel));
} else if (val == 1) {
newBody.Add(MakeGoTo(labels, currentState));
} else {
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
}
} else if (expr != null && expr.Code == ILCode.Ret) {
if (expr.Arguments.Count != 1 || expr.Arguments[0].Code != ILCode.Ldc_I4)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
// handle direct return (e.g. in release builds)
int val = (int)expr.Arguments[0].Operand;
if (val == 0) {
@@ -828,24 +501,24 @@ namespace ICSharpCode.Decompiler.ILAst
} else if (val == 1) {
newBody.Add(MakeGoTo(labels, currentState));
} else {
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
}
} else if (expr != null && expr.Code == ILCode.Call && expr.Arguments.Count == 1 && expr.Arguments[0].MatchThis()) {
MethodDefinition method = GetMethodDefinition(expr.Operand as MethodReference);
if (method == null)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
Interval interval;
if (method == disposeMethod) {
// Explicit call to dispose is used for "yield break;" within the method.
ILExpression br = body.ElementAtOrDefault(++pos) as ILExpression;
if (br == null || !(br.Code == ILCode.Br || br.Code == ILCode.Leave) || br.Operand != returnFalseLabel)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
newBody.Add(MakeGoTo(returnFalseLabel));
} else if (finallyMethodToStateInterval.TryGetValue(method, out interval)) {
// Call to Finally-method
int index = stateChanges.FindIndex(ss => ss.NewState >= interval.Start && ss.NewState <= interval.End);
if (index < 0)
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
ILLabel label = new ILLabel();
label.Name = "JumpOutOfTryFinally" + interval.Start + "_" + interval.End;
@@ -883,7 +556,7 @@ namespace ICSharpCode.Decompiler.ILAst
if (pair.Value.Contains(state))
return MakeGoTo(pair.Key);
}
- throw new YieldAnalysisFailedException();
+ throw new SymbolicAnalysisFailedException();
}
ILBlock ConvertFinallyBlock(MethodDefinition finallyMethod)
@@ -907,6 +580,11 @@ namespace ICSharpCode.Decompiler.ILAst
#region TranslateFieldsToLocalAccess
void TranslateFieldsToLocalAccess()
+ {
+ TranslateFieldsToLocalAccess(newBody, fieldToParameterMap);
+ }
+
+ internal static void TranslateFieldsToLocalAccess(List newBody, Dictionary fieldToParameterMap)
{
var fieldToLocalMap = new DefaultDictionary(f => new ILVariable { Name = f.Name, Type = f.FieldType });
foreach (ILNode node in newBody) {
diff --git a/src/Libraries/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs b/src/Libraries/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs
index 9260b6ba55..818b72b10b 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Properties/AssemblyInfo.cs
@@ -19,8 +19,8 @@ using System.Runtime.InteropServices;
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible(false)]
-[assembly: AssemblyVersion("2.0.0.1595")]
-[assembly: AssemblyInformationalVersion("2.0.0.1595-5773d3d2")]
+[assembly: AssemblyVersion("2.1.0.1603")]
+[assembly: AssemblyInformationalVersion("2.1.0.1603-1170e2f8")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2243:AttributeStringLiteralsShouldParseCorrectly",
diff --git a/src/Libraries/ICSharpCode.Decompiler/Tests/Async.cs b/src/Libraries/ICSharpCode.Decompiler/Tests/Async.cs
new file mode 100644
index 0000000000..ccd1222556
--- /dev/null
+++ b/src/Libraries/ICSharpCode.Decompiler/Tests/Async.cs
@@ -0,0 +1,144 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+#pragma warning disable 1998
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+public class Async
+{
+ public async void SimpleVoidMethod()
+ {
+ Console.WriteLine("Before");
+ await Task.Delay(TimeSpan.FromSeconds(1.0));
+ Console.WriteLine("After");
+ }
+
+ public async void VoidMethodWithoutAwait()
+ {
+ Console.WriteLine("No Await");
+ }
+
+ public async Task SimpleVoidTaskMethod()
+ {
+ Console.WriteLine("Before");
+ await Task.Delay(TimeSpan.FromSeconds(1.0));
+ Console.WriteLine("After");
+ }
+
+ public async Task TaskMethodWithoutAwait()
+ {
+ Console.WriteLine("No Await");
+ }
+
+ public async Task SimpleBoolTaskMethod()
+ {
+ Console.WriteLine("Before");
+ await Task.Delay(TimeSpan.FromSeconds(1.0));
+ Console.WriteLine("After");
+ return true;
+ }
+
+ public async void TwoAwaitsWithDifferentAwaiterTypes()
+ {
+ Console.WriteLine("Before");
+ if (await this.SimpleBoolTaskMethod())
+ {
+ await Task.Delay(TimeSpan.FromSeconds(1.0));
+ }
+ Console.WriteLine("After");
+ }
+
+ public async void StreamCopyTo(Stream destination, int bufferSize)
+ {
+ byte[] array = new byte[bufferSize];
+ int count;
+ while ((count = await destination.ReadAsync(array, 0, array.Length)) != 0)
+ {
+ await destination.WriteAsync(array, 0, count);
+ }
+ }
+
+ public async void StreamCopyToWithConfigureAwait(Stream destination, int bufferSize)
+ {
+ byte[] array = new byte[bufferSize];
+ int count;
+ while ((count = await destination.ReadAsync(array, 0, array.Length).ConfigureAwait(false)) != 0)
+ {
+ await destination.WriteAsync(array, 0, count).ConfigureAwait(false);
+ }
+ }
+
+ public async void AwaitInLoopCondition()
+ {
+ while (await this.SimpleBoolTaskMethod())
+ {
+ Console.WriteLine("Body");
+ }
+ }
+
+ public async Task AwaitInForEach(IEnumerable> elements)
+ {
+ int num = 0;
+ foreach (Task current in elements)
+ {
+ num += await current;
+ }
+ return num;
+ }
+
+ public async Task TaskMethodWithoutAwaitButWithExceptionHandling()
+ {
+ try
+ {
+ using (new StringWriter())
+ {
+ Console.WriteLine("No Await");
+ }
+ }
+ catch (Exception)
+ {
+ Console.WriteLine("Crash");
+ }
+ }
+
+ public async Task NestedAwait(Task> task)
+ {
+ return await(await task);
+ }
+
+ public async Task AwaitWithStack(Task task)
+ {
+ Console.WriteLine("A", 1, await task);
+ }
+
+ public async Task AwaitWithStack2(Task task)
+ {
+ if (await this.SimpleBoolTaskMethod())
+ {
+ Console.WriteLine("A", 1, await task);
+ }
+ else
+ {
+ int num = 1;
+ Console.WriteLine("A", 1, num);
+ }
+ }
+}
diff --git a/src/Libraries/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj b/src/Libraries/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj
index 52a4f950da..69598ac73f 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj
+++ b/src/Libraries/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj
@@ -7,7 +7,7 @@
Library
ICSharpCode.Decompiler.Tests
ICSharpCode.Decompiler.Tests
- v4.0
+ v4.5
Properties
True
False
@@ -15,6 +15,7 @@
false
False
67,169,1058,728,1720,649
+
x86
@@ -62,6 +63,7 @@
+
diff --git a/src/Libraries/ICSharpCode.Decompiler/Tests/PropertiesAndEvents.cs b/src/Libraries/ICSharpCode.Decompiler/Tests/PropertiesAndEvents.cs
index bdc4f7dd1f..9b3d165893 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Tests/PropertiesAndEvents.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Tests/PropertiesAndEvents.cs
@@ -24,7 +24,7 @@ public class PropertiesAndEvents
public event EventHandler AutomaticEvent;
[field: NonSerialized]
- public event EventHandler AutomaticEventWithInitializer = delegate
+ public event EventHandler AutomaticEventWithInitializer = delegate(object sender, EventArgs e)
{
};
diff --git a/src/Libraries/ICSharpCode.Decompiler/Tests/TestRunner.cs b/src/Libraries/ICSharpCode.Decompiler/Tests/TestRunner.cs
index 8160a7376d..52a03a4623 100644
--- a/src/Libraries/ICSharpCode.Decompiler/Tests/TestRunner.cs
+++ b/src/Libraries/ICSharpCode.Decompiler/Tests/TestRunner.cs
@@ -34,6 +34,12 @@ namespace ICSharpCode.Decompiler.Tests
[TestFixture]
public class TestRunner
{
+ [Test]
+ public void Async()
+ {
+ TestFile(@"..\..\Tests\Async.cs");
+ }
+
[Test, Ignore("disambiguating overloads is not yet implemented")]
public void CallOverloadedMethod()
{
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
index 5d16952249..b8bfada506 100755
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
@@ -2282,8 +2282,8 @@
-
+
@@ -2312,6 +2312,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index cdf7818119..f7e840c8fa 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -343,6 +343,18 @@
+
+
+
+
+
+
+
+
+ SelectProfileDialog.xaml
+ Code
+
+
@@ -738,9 +750,9 @@
+
-
@@ -813,6 +825,7 @@
+
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}
@@ -836,6 +849,7 @@
+
diff --git a/src/Main/Base/Project/Src/Bookmarks/BookmarkManager.cs b/src/Main/Base/Project/Src/Bookmarks/BookmarkManager.cs
index b298d0aa2d..6c638395fe 100644
--- a/src/Main/Base/Project/Src/Bookmarks/BookmarkManager.cs
+++ b/src/Main/Base/Project/Src/Bookmarks/BookmarkManager.cs
@@ -5,6 +5,7 @@ using ICSharpCode.NRefactory;
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
@@ -96,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
static void OnAdded(BookmarkEventArgs e)
{
if (Added != null) {
- Added(null, e);
+ Added(null, e);
}
}
@@ -139,8 +140,8 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
for(int index = bookmarks.Count - 1; index >= 0; --index){
SDBookmark bookmark = bookmarks[index];
if(match(bookmark)) {
- bookmarks.RemoveAt(index);
- OnRemoved(new BookmarkEventArgs(bookmark));
+ bookmarks.RemoveAt(index);
+ OnRemoved(new BookmarkEventArgs(bookmark));
}
}
}
diff --git a/src/Main/Base/Project/Src/Bookmarks/SDMarkerBookmark.cs b/src/Main/Base/Project/Src/Bookmarks/SDMarkerBookmark.cs
index 3fd85118a5..6e8df849af 100644
--- a/src/Main/Base/Project/Src/Bookmarks/SDMarkerBookmark.cs
+++ b/src/Main/Base/Project/Src/Bookmarks/SDMarkerBookmark.cs
@@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.Bookmarks
protected abstract ITextMarker CreateMarker(ITextMarkerService markerService);
- void SetMarker()
+ public void SetMarker()
{
RemoveMarker();
if (this.Document != null) {
diff --git a/src/Main/Base/Project/Src/Editor/ISyntaxHighlighter.cs b/src/Main/Base/Project/Src/Editor/ISyntaxHighlighter.cs
index cf0c5e581c..7ed1b3b8db 100644
--- a/src/Main/Base/Project/Src/Editor/ISyntaxHighlighter.cs
+++ b/src/Main/Base/Project/Src/Editor/ISyntaxHighlighter.cs
@@ -20,6 +20,11 @@ namespace ICSharpCode.SharpDevelop.Editor
///
IEnumerable GetSpanColorNamesFromLineStart(int lineNumber);
+ ///
+ /// Retrieves the HighlightingColor with the specified name. Returns null if no color matching the name is found.
+ ///
+ HighlightingColor GetNamedColor(string name);
+
///
/// Gets the highlighting definition that is being used.
///
diff --git a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
index e3951cdb8e..99c2d8ea6a 100644
--- a/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
+++ b/src/Main/Base/Project/Src/Gui/Components/ExtTreeView/ExtTreeView.cs
@@ -132,7 +132,7 @@ namespace ICSharpCode.SharpDevelop.Gui
#region label editing
- string labelEditOldLabel;
+ //string labelEditOldLabel;
public void StartLabelEdit(ExtTreeNode node)
{
@@ -146,10 +146,12 @@ namespace ICSharpCode.SharpDevelop.Gui
LabelEdit = true;
node.BeforeLabelEdit();
node.BeginEdit();
- // remove node's label so that it doesn't get rendered behind the label editing textbox
- // (if the user deletes some characters so that the text box shrinks)
- labelEditOldLabel = node.Text;
- node.Text = "";
+ // Workaround disabled due to http://community.sharpdevelop.net/forums/t/14354.aspx
+ // "Rename fails if filename in Project Explorer is too long for the treeview viewport"
+ //// remove node's label so that it doesn't get rendered behind the label editing textbox
+ //// (if the user deletes some characters so that the text box shrinks)
+ //labelEditOldLabel = node.Text;
+ //node.Text = "";
}
}
@@ -176,8 +178,8 @@ namespace ICSharpCode.SharpDevelop.Gui
ExtTreeNode node = e.Node as ExtTreeNode;
if (node != null) {
- node.Text = labelEditOldLabel;
- labelEditOldLabel = null;
+ //node.Text = labelEditOldLabel;
+ //labelEditOldLabel = null;
if (e.Label != null) {
node.AfterLabelEdit(e.Label);
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs
index dcef64688b..e918862837 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs
@@ -8,11 +8,11 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
-using ICSharpCode.SharpDevelop.Parser;
-using Mono.Cecil;
using ICSharpCode.Build.Tasks;
using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
+using Mono.Cecil;
namespace ICSharpCode.SharpDevelop.Gui
{
@@ -49,7 +49,6 @@ namespace ICSharpCode.SharpDevelop.Gui
protected ListView listView;
CheckBox chooseSpecificVersionCheckBox;
TextBox filterTextBox;
- Button searchButton;
ToolTip toolTip = new ToolTip();
ToolTip filterTextboxToolTip = new ToolTip();
ISelectReferenceDialog selectDialog;
@@ -92,179 +91,81 @@ namespace ICSharpCode.SharpDevelop.Gui
chooseSpecificVersionCheckBox = new CheckBox();
chooseSpecificVersionCheckBox.Dock = DockStyle.Left;
+ chooseSpecificVersionCheckBox.AutoSize = true;
chooseSpecificVersionCheckBox.Text = StringParser.Parse("${res:Dialog.SelectReferenceDialog.GacReferencePanel.ChooseSpecificAssemblyVersion}");
chooseSpecificVersionCheckBox.CheckedChanged += delegate {
- listView.Items.Clear();
- if (chooseSpecificVersionCheckBox.Checked)
- listView.Items.AddRange(fullItemList);
- else
- listView.Items.AddRange(shortItemList);
+ ResetList();
+ Search();
};
- filterTextBox = new TextBox { Width = 100, Dock = DockStyle.Right };
- searchButton = new Button { Dock = DockStyle.Right, Width = 50, Text = "Search" };
- toolTip.SetToolTip(searchButton, searchButton.Text);
+ filterTextBox = new TextBox { Width = 150, Dock = DockStyle.Right };
filterTextboxToolTip.SetToolTip(filterTextBox, "Search by type name");
- searchButton.Click += searchButton_Click;
+ filterTextBox.TextChanged += delegate { Search(); };
+
+ IButtonControl defaultButton = null;
+ filterTextBox.Enter += delegate { defaultButton = ((Form)selectDialog).AcceptButton; ((Form)selectDialog).AcceptButton = null; };
+ filterTextBox.Leave += delegate { ((Form)selectDialog).AcceptButton = defaultButton; };
+
upperPanel.Controls.Add(chooseSpecificVersionCheckBox);
upperPanel.Controls.Add(filterTextBox);
- upperPanel.Controls.Add(searchButton);
this.Controls.Add(upperPanel);
PrintCache();
-
- worker = new BackgroundWorker { WorkerSupportsCancellation = true, WorkerReportsProgress = true };
- worker.DoWork += searchTask_DoWork;
- worker.RunWorkerCompleted += searchTask_RunWorkerCompleted;
- worker.ProgressChanged += searchTask_ProgressChanged;
- }
-
- #region Search by types
-
- void searchTask_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- searchButton.Text = string.Format("{0} %", e.ProgressPercentage);
}
- void searchTask_DoWork(object sender, DoWorkEventArgs e)
+ void ResetList()
{
- e.Cancel = !SearchTypesName(
- chooseSpecificVersionCheckBox.Checked ? fullItemList : shortItemList, filterTextBox.Text);
- }
-
- void searchButton_Click(object sender, EventArgs e)
- {
- string text;
- if(!worker.IsBusy) {
- filterTextBox.ReadOnly = true;
- worker.RunWorkerAsync();
- text = "Cancel";
- }
- else {
- worker.CancelAsync();
- text = "Search";
- filterTextBox.ReadOnly = false;
- }
- searchButton.Text = text;
- this.toolTip.SetToolTip(searchButton, text);
+ listView.Items.Clear();
+ if (chooseSpecificVersionCheckBox.Checked)
+ listView.Items.AddRange(fullItemList);
+ else
+ listView.Items.AddRange(shortItemList);
+
}
- void searchTask_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
+ void Search()
{
- if (this.IsDisposed) {
- // avoid crash when dialog is closed before search is completed
+ ResetList();
+ if (string.IsNullOrWhiteSpace(filterTextBox.Text))
return;
- }
- searchButton.Text = "Search"; this.toolTip.SetToolTip(searchButton, searchButton.Text);
- filterTextBox.ReadOnly = false;
- if (resultList != null && resultList.Count > 0) {
- listView.Items.Clear();
- listView.Items.AddRange(resultList.ToArray());
- }
+ SearchItems(filterTextBox.Text);
+ listView.Items.Clear();
+ listView.Items.AddRange(resultList.ToArray());
}
-
- ///
- /// Search for type name.
- ///
- /// Array of items where to search.
- /// Filter to search.
- /// true, if call succeded, false otherwise.
- bool SearchTypesName(ListViewItem[] list, string filter)
+
+ void SearchItems(string text)
{
- // return null if list is null
- if (list == null) return false;
-
- // return if filter is empty
- if (string.IsNullOrEmpty(filter)) {
- resultList = list.ToList();
- return true;
- }
-
- // clear result
- resultList.Clear();
-
- // scan the list
- for (int i = 0; i < list.Length; ++i) {
- ListViewItem item = list[i];
- DomAssemblyName asm = item.Tag as DomAssemblyName;
-
- // search path
- if (asm.FullName.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0)
- resultList.Add(item);
- else {
- if (worker.CancellationPending)
- return false;
-
- // search using Mono.Cecil the class/interface/structs names
- AssemblyDefinition currentAssembly;
- if(!assembliesCache.ContainsKey(asm.FullName)) {
- try {
- currentAssembly = resolver.Resolve(asm.FullName);
- }
- catch {
- continue;
- }
- assembliesCache.Add(asm.FullName, currentAssembly);
- }
- else
- currentAssembly = assembliesCache[asm.FullName];
-
- // search types in modules
- if (currentAssembly != null) {
- foreach(var module in currentAssembly.Modules)
- foreach (var type in module.Types)
- if (type.Name.IndexOf(filter, StringComparison.OrdinalIgnoreCase) >= 0 &&
- !resultList.Contains(item))
- resultList.Add(item);
- }
-
- // report
- worker.ReportProgress((int)(((i * 1.0) / list.Length) * 100));
- }
- }
-
- return true;
+ var searchList = listView.Items.OfType().ToList();
+ searchList.RemoveWhere(item => item.Text.IndexOf(text, StringComparison.OrdinalIgnoreCase) < 0);
+ resultList = searchList;
}
-
+
protected override void Dispose(bool disposing)
{
if (disposing) {
- // Clear all resources used.
-
// cancel the worker
if (worker != null && worker.IsBusy && !worker.CancellationPending)
worker.CancelAsync();
worker = null;
// clear all cached data
- if (assembliesCache.Count > 0)
- assembliesCache.Clear();
assembliesCache = null;
-
- if (resultList.Count > 0)
- resultList.Clear();
resultList = null;
-
selectDialog = null;
resolver = null;
-
- if (fullItemList.Length > 0)
- Array.Clear(fullItemList, 0, fullItemList.Length);
fullItemList = null;
// force a collection to reclam memory
GC.Collect();
}
-
base.Dispose(disposing);
}
- #endregion
void columnClick(object sender, ColumnClickEventArgs e)
{
- if(e.Column < 2) {
+ if (e.Column < 2) {
sorter.CurrentColumn = e.Column;
listView.Sort();
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
index 78dec9ce42..d28261fb3e 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ProjectWithServiceReferences.cs
@@ -82,9 +82,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void AddServiceReferencesItemToProject()
{
- var projectItem = new ServiceReferencesProjectItem(project);
- projectItem.Include = "Service References";
- AddProjectItemToProject(projectItem);
+ if (IsServiceReferencesItemMissingFromProject()) {
+ var projectItem = new ServiceReferencesProjectItem(project);
+ projectItem.Include = "Service References";
+ AddProjectItemToProject(projectItem);
+ }
+ }
+
+ bool IsServiceReferencesItemMissingFromProject()
+ {
+ return project.GetItemsOfType(ItemType.ServiceReferences).Count() == 0;
}
void AddServiceReferenceItemToProject(ServiceReferenceFileName fileName)
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/TreeViewOptionsDialog.xaml.cs b/src/Main/Base/Project/Src/Gui/Dialogs/TreeViewOptionsDialog.xaml.cs
index 48e3a5089e..f6c7dcfd63 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/TreeViewOptionsDialog.xaml.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/TreeViewOptionsDialog.xaml.cs
@@ -30,6 +30,9 @@ namespace ICSharpCode.SharpDevelop.Gui
if (optionPanels == null)
throw new ArgumentNullException("optionPanels");
InitializeComponent();
+
+ ICSharpCode.SharpDevelop.Gui.FormLocationHelper.ApplyWindow(this, "TreeViewOptionsDialog.WindowBounds", true);
+
var list = optionPanels.Select(op => new OptionPanelNode(op, this)).ToList();
treeView.ItemsSource = list;
if (list.Count > 0) {
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
index d5228f375c..ae85b17eba 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
@@ -12,13 +12,12 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{
public override void Run()
{
- AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.SelectedNode;
Solution solution = ProjectService.OpenSolution;
- if (node == null || solution == null) {
+ IProject project = ProjectService.CurrentProject;
+ if (solution == null || project == null)
return;
- }
- if (node.Project.IsStartable) {
- solution.Preferences.StartupProject = node.Project;
+ if (project.IsStartable) {
+ solution.Preferences.StartupProject = project;
} else {
MessageService.ShowError("${res:BackendBindings.ExecutionManager.CantExecuteDLLError}");
}
@@ -34,15 +33,14 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
internal static void DoRunProject(bool withDebugging = true)
{
- AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.SelectedNode;
- if (node == null) {
+ IProject project = ProjectService.CurrentProject;
+ if (project == null)
return;
- }
- if (node.Project.IsStartable) {
- BuildProjectBeforeExecute build = new BuildProjectBeforeExecute(node.Project);
+ if (project.IsStartable) {
+ BuildProjectBeforeExecute build = new BuildProjectBeforeExecute(project);
build.BuildComplete += delegate {
if (build.LastBuildResults.ErrorCount == 0) {
- node.Project.Start(withDebugging);
+ project.Start(withDebugging);
}
};
build.Run();
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs
index 2ecb4a6e6b..512abed577 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ReferenceFolderNodeCommands.cs
@@ -3,6 +3,7 @@
using System;
using System.Diagnostics;
+using System.IO;
using System.Net;
using System.Web.Services.Discovery;
using System.Windows.Forms;
@@ -177,54 +178,70 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
return webReferencesNode;
}
- }
-
+ }
- public class ShowServiceInBrowser: AbstractMenuCommand
+ public class ShowServiceInBrowser : AbstractMenuCommand
{
- private static string NodePath = "//system.serviceModel//client//endpoint";
+ static string NodePath = "//system.serviceModel//client//endpoint";
public override void Run()
{
- // hack try url fvoid = LoadConfigDocument(f);
+ XmlDocument appConfig = LoadAppConfig();
+ if (appConfig != null) {
+ string endpointAddress = FindEndPointAddress(appConfig);
+ if (endpointAddress != null) {
+ StartInternetExplorer(endpointAddress);
+ } else {
+ MessageService.ShowError("No service found.");
+ }
+ } else {
+ MessageService.ShowError("No app.config file found.");
+ }
+ }
+
+ XmlDocument LoadAppConfig()
+ {
AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.SelectedNode;
- var f = CompilableProject.GetAppConfigFile(node.Project,false);
- if (!String.IsNullOrEmpty(f))
- {
-
- var configFile = LoadConfigDocument(f);
- var endPoint = configFile.SelectSingleNode(NodePath).Attributes["address"].Value;
- ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
- startInfo.WindowStyle = ProcessWindowStyle.Normal;
- startInfo.Arguments = endPoint;
-
- Process.Start(startInfo);
-
-
-
- } else
- {
- MessageService.ShowError("No app.config File found");
+ FileName appConfigFileName = CompilableProject.GetAppConfigFile(node.Project, false);
+ if (!String.IsNullOrEmpty(appConfigFileName)) {
+ return LoadAppConfig(appConfigFileName);
+ }
+ return null;
}
+
+ static XmlDocument LoadAppConfig(string fileName)
+ {
+ try {
+ var doc = new XmlDocument();
+ doc.Load(fileName);
+ return doc;
+ } catch (FileNotFoundException ex) {
+ LoggingService.Debug("LoadConfigDocument: " + fileName + ": " + ex.Message);
+ }
+ return null;
}
- static XmlDocument LoadConfigDocument(string fileName)
- {
- XmlDocument doc = null;
- try
- {
- doc = new XmlDocument();
-
- doc.Load(fileName);
- return doc;
- }
- catch (System.IO.FileNotFoundException e)
- {
- throw new Exception("No configuration file found.", e);
- }
- }
+ string FindEndPointAddress(XmlDocument appConfig)
+ {
+ XmlNode endPoint = appConfig.SelectSingleNode(NodePath);
+ if (endPoint != null) {
+ XmlAttribute addressAttribute = endPoint.Attributes["address"];
+ if (addressAttribute != null) {
+ return addressAttribute.Value;
+ }
+ }
+ return null;
+ }
+
+ void StartInternetExplorer(string arguments)
+ {
+ var startInfo = new ProcessStartInfo("IExplore.exe") {
+ WindowStyle = ProcessWindowStyle.Normal,
+ Arguments = arguments
+ };
+ Process.Start(startInfo);
+ }
}
-
public class AddServiceReferenceToProject : AbstractMenuCommand
{
@@ -235,7 +252,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
if (project == null) {
return;
}
-
+
var vm = new AddServiceReferenceViewModel(project);
var dialog = new AddServiceReferenceDialog();
dialog.DataContext = vm;
@@ -246,14 +263,12 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
}
-
public class RefreshReference : AbstractMenuCommand
{
public override void Run()
{
- ReferenceNode node = Owner as ReferenceNode;
- if (node != null)
- {
+ var node = Owner as ReferenceNode;
+ if (node != null) {
ReferenceProjectItem item = node.ReferenceProjectItem;
if (item != null) {
#warning Reimplement RefreshReference
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs
index 2b20ab8bc2..8c7bc9a05a 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs
@@ -51,8 +51,8 @@ namespace ICSharpCode.SharpDevelop.Project
///
/// Returns the project in which this node belongs to. This assumes that
- /// any node is child of a project. THIS DON'T WORK ON COMBINE NODES!
- /// (a combine node returns null)
+ /// any node is child of a project. Keep in mind that Solution Folders
+ /// and Solution Items do not have a project assigned.
///
public virtual IProject Project {
get {
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs
index c0b879076d..97a5f52779 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs
@@ -43,6 +43,8 @@ namespace ICSharpCode.SharpDevelop.Project
public ProjectNode(IProject project)
{
+ if (project == null)
+ throw new ArgumentNullException("project");
sortOrder = 1;
this.ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/ProjectNode";
diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs
index ffe240d77e..d9a992236d 100644
--- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs
+++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs
@@ -27,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
public ProjectCreateInformation(IEnumerable projects)
{
- Platform = "x86";
+ Platform = "AnyCPU";
createdProjects.AddRange(projects);
}
diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
index 87fcb794bd..ff2b2fbc61 100644
--- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
+++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
@@ -42,6 +42,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
string name;
string relativePath;
+ string defaultPlatform;
///
/// The language of the project.
@@ -56,6 +57,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
List projectItems = new List();
List projectProperties = new List();
List> createActions = new List>();
+ List> preCreateActions = new List>();
///
/// Creates a project descriptor for the project node specified by the xml element.
@@ -83,6 +85,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
if (string.IsNullOrEmpty(languageName)) {
ProjectTemplate.WarnAttributeMissing(element, "language");
}
+ defaultPlatform = element.GetAttribute("defaultPlatform");
LoadElementChildren(element, hintPath);
}
@@ -109,6 +112,9 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
case "CreateActions":
LoadCreateActions(node);
break;
+ case "PreCreateActions":
+ LoadPreCreateActions(node);
+ break;
case "ProjectItems":
LoadProjectItems(node);
break;
@@ -151,7 +157,16 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
}
}
- static Action ReadAction(XmlElement el)
+ void LoadPreCreateActions(XmlElement preCreateActionsElement)
+ {
+ foreach (XmlElement el in preCreateActionsElement) {
+ Action action = ReadAction(el);
+ if (action != null)
+ preCreateActions.Add(action);
+ }
+ }
+
+ static Action
IEnumerable GetAvailableCompilerVersions();
+ ///
+ /// Gets the supported target frameworks.
+ ///
+ IEnumerable GetAvailableTargetFrameworks();
+
///
/// Gets the current compiler version.
///
@@ -56,6 +61,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
public static readonly CompilerVersion MSBuild35 = new CompilerVersion(new Version(3, 5), "MSBuild 3.5");
public static readonly CompilerVersion MSBuild40 = new CompilerVersion(new Version(4, 0), "MSBuild 4.0");
+ [Obsolete("Use IUpgradableProject.GetAvailableTargetFrameworks() instead")]
public virtual IEnumerable GetSupportedTargetFrameworks()
{
return from fx in TargetFramework.TargetFrameworks
diff --git a/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs b/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs
index d0f20d990b..63e48f2852 100644
--- a/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs
+++ b/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs
@@ -121,34 +121,30 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
void UpdateTargetFrameworkComboBox()
{
// Determine the available target frameworks
- List availableFrameworks;
bool doNotChangeAllowed;
CompilerVersion selectedCompiler = newVersionComboBox.SelectedValue as CompilerVersion;
- if (selectedCompiler == null || selectedCompiler is UnchangedCompilerVersion) {
- // no entries or "Do not change" selected
- // -> available target frameworks is the intersection of all compiler's target framework,
- // and "Do not change" is always available
-
- availableFrameworks = (
- from Entry entry in listView.SelectedItems
- where entry.CompilerVersion != null
- from fx in entry.CompilerVersion.GetSupportedTargetFrameworks()
- select fx
- ).Distinct().ToList();
-
- doNotChangeAllowed = true;
- } else {
- // Specific compiler version is selected
- // Show that compiler's target frameworks
- availableFrameworks = selectedCompiler.GetSupportedTargetFrameworks().ToList();
- // Allow do not change on target framework if all current frameworks are supported
- // by the new compiler.
- doNotChangeAllowed = true;
- foreach (Entry entry in listView.SelectedItems) {
- doNotChangeAllowed &= availableFrameworks.Contains(entry.TargetFramework);
- }
+ if (selectedCompiler is UnchangedCompilerVersion)
+ selectedCompiler = null;
+
+ // Calculate the intersection of available frameworks for all selected projects:
+ HashSet availableFrameworkSet = null;
+ foreach (Entry entry in listView.SelectedItems) {
+ var entryFrameworks = entry.Project.GetAvailableTargetFrameworks()
+ .Where(fx => fx.IsCompatibleWith(selectedCompiler ?? entry.CompilerVersion));
+ if (availableFrameworkSet == null)
+ availableFrameworkSet = new HashSet(entryFrameworks);
+ else
+ availableFrameworkSet.IntersectWith(entryFrameworks);
}
+ // Allow do not change on target framework if all current frameworks are supported
+ // by the new compiler.
+ doNotChangeAllowed = true;
+ foreach (Entry entry in listView.SelectedItems) {
+ doNotChangeAllowed &= availableFrameworkSet.Contains(entry.TargetFramework);
+ }
+
+ List availableFrameworks = availableFrameworkSet.ToList();
availableFrameworks.Sort((a, b) => a.DisplayName.CompareTo(b.DisplayName));
if (doNotChangeAllowed) {
availableFrameworks.Insert(0, new UnchangedTargetFramework());
@@ -225,8 +221,11 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
TargetFramework selectedFramework = newFrameworkComboBox.SelectedValue as TargetFramework;
if (selectedCompiler is UnchangedCompilerVersion)
selectedCompiler = null;
- if (selectedFramework is UnchangedTargetFramework)
- selectedFramework = null;
+ if (selectedFramework != null) {
+ // Show dialog for picking target frameworks for portable library.
+ // This also handles UnchangedTargetFramework
+ selectedFramework = selectedFramework.PickFramework(listView.SelectedItems.Cast().Select(entry => entry.Project).ToList());
+ }
foreach (Entry entry in listView.SelectedItems) {
@@ -265,6 +264,11 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
{
}
+ public override TargetFramework PickFramework(IEnumerable selectedProjects)
+ {
+ return null;
+ }
+
public override bool Equals(object obj)
{
return obj is UnchangedTargetFramework;
diff --git a/src/Main/Base/Project/Src/Project/IProject.cs b/src/Main/Base/Project/Src/Project/IProject.cs
index 7ee9b823b2..11ff2dd4bd 100644
--- a/src/Main/Base/Project/Src/Project/IProject.cs
+++ b/src/Main/Base/Project/Src/Project/IProject.cs
@@ -256,6 +256,9 @@ namespace ICSharpCode.SharpDevelop.Project
///
void SaveProjectExtensions(string name, XElement element);
+ // TODO:
+ bool HasProjectType(Guid projectTypeGuid);
+
///
/// Gets the project content associated with this project.
///
diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
index 611cda7dbb..95f7c0ad8a 100644
--- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
+++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
@@ -179,7 +179,10 @@ namespace ICSharpCode.SharpDevelop.Project
this.ActiveConfiguration = "Debug";
this.ActivePlatform = information.Platform;
- SetProperty(null, information.Platform, "PlatformTarget", "x86", PropertyStorageLocations.PlatformSpecific, false);
+ if (information.Platform == "x86")
+ SetProperty(null, information.Platform, "PlatformTarget", "x86", PropertyStorageLocations.PlatformSpecific, false);
+ else
+ SetProperty(null, information.Platform, "PlatformTarget", "AnyCPU", PropertyStorageLocations.PlatformSpecific, false);
}
///
@@ -1629,5 +1632,44 @@ namespace ICSharpCode.SharpDevelop.Project
return formattedText.ToString();
}
#endregion
+
+ #region HasProjectType
+ public override bool HasProjectType(Guid projectTypeGuid)
+ {
+ string guidList = GetEvaluatedProperty("ProjectTypeGuids");
+ if (string.IsNullOrEmpty(guidList))
+ return base.HasProjectType(projectTypeGuid);
+ foreach (string guid in guidList.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) {
+ Guid result;
+ if (Guid.TryParse(guid, out result) && projectTypeGuid == result)
+ return true;
+ }
+ return false;
+ }
+
+ public void AddProjectType(Guid projectTypeGuid)
+ {
+ string guidList = GetEvaluatedProperty("ProjectTypeGuids");
+ if (string.IsNullOrEmpty(guidList))
+ guidList = this.TypeGuid;
+ SetProperty("ProjectTypeGuids", guidList + ";" + projectTypeGuid.ToString("B").ToUpperInvariant(), false);
+ InvalidateBehavior();
+ }
+
+ public void RemoveProjectType(Guid projectTypeGuid)
+ {
+ string guidList = GetEvaluatedProperty("ProjectTypeGuids");
+ if (!string.IsNullOrEmpty(guidList)) {
+ List remainingGuids = new List();
+ foreach (string guid in guidList.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) {
+ Guid result;
+ if (!(Guid.TryParse(guid, out result) && projectTypeGuid == result))
+ remainingGuids.Add(guid);
+ }
+ SetProperty("ProjectTypeGuids", string.Join(";", remainingGuids), false);
+ InvalidateBehavior();
+ }
+ }
+ #endregion
}
}
diff --git a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs
index 2d7ab7f7b3..6739b34b7a 100644
--- a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs
+++ b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs
@@ -7,9 +7,11 @@ using System.Linq;
using System.Text.RegularExpressions;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Parser;
+using ICSharpCode.SharpDevelop.Util;
using Microsoft.Build.Construction;
using Microsoft.Build.Execution;
using Microsoft.Build.Framework;
+using Microsoft.Build.Logging;
using MSBuild = Microsoft.Build;
using ProjectCollection = Microsoft.Build.Evaluation.ProjectCollection;
@@ -169,6 +171,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
ProjectInstance project = baseProject.CreateProjectInstance();
project.SetProperty("BuildingProject", "false");
+ project.SetProperty("DesignTimeBuild", "true");
List references = (
from item in project.Items
@@ -201,9 +204,16 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
- string[] targets = { "ResolveAssemblyReferences" };
- BuildRequestData requestData = new BuildRequestData(project, targets, new HostServices());
+ List targets = new List();
+ if (baseProject.HasProjectType(ProjectTypeGuids.PortableLibrary)) {
+ targets.Add("ResolveReferences");
+ targets.Add("DesignTimeResolveAssemblyReferences");
+ } else {
+ targets.Add("ResolveAssemblyReferences");
+ }
+ BuildRequestData requestData = new BuildRequestData(project, targets.ToArray(), new HostServices());
List loggers = new List();
+ //loggers.Add(new ConsoleLogger(LoggerVerbosity.Diagnostic));
if (logErrorsToOutputPad)
loggers.Add(new SimpleErrorLogger());
lock (SolutionProjectCollectionLock) {
@@ -231,6 +241,8 @@ namespace ICSharpCode.SharpDevelop.Project
CopyLocal = bool.Parse(msbuildItem.GetMetadataValue("CopyLocal")),
ReferenceItems = referenceItems
};
+ // HACK: mscorlib is reported twice for portable library projects (even if we don't specify it as additionalReference)
+ query = query.DistinctBy(asm => asm.FullPath);
List resolvedAssemblies = new List();
List handledReferenceItems = new List();
foreach (var assembly in query) {
diff --git a/src/Main/Base/Project/Src/Project/MissingProject.cs b/src/Main/Base/Project/Src/Project/MissingProject.cs
index 721d8c7d51..1e7bf5f76c 100644
--- a/src/Main/Base/Project/Src/Project/MissingProject.cs
+++ b/src/Main/Base/Project/Src/Project/MissingProject.cs
@@ -30,5 +30,10 @@ namespace ICSharpCode.SharpDevelop.Project
return projectBehavior;
}
}
+
+ public override bool HasProjectType(Guid projectTypeGuid)
+ {
+ return false;
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/CheckPortableLibraryInstalled.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/CheckPortableLibraryInstalled.cs
new file mode 100644
index 0000000000..835f668240
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/CheckPortableLibraryInstalled.cs
@@ -0,0 +1,35 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop.Gui;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ ///
+ /// Shows a message box if the portable library is not installed.
+ ///
+ public class CheckPortableLibraryInstalled : AbstractCommand
+ {
+ public override void Run()
+ {
+ if (!ProfileList.IsPortableLibraryInstalled()) {
+ using (ToolNotFoundDialog dlg = new ToolNotFoundDialog(
+ StringParser.Parse(
+ "${res:PortableLibrary.CouldNotFindTools}" + Environment.NewLine + Environment.NewLine +
+ "${res:PortableLibrary.ToolsInstallationHelp}"),
+ "http://go.microsoft.com/fwlink/?LinkId=210823"
+ )) {
+ // our message is long, so make the window bigger than usual
+ dlg.Width += 70;
+ dlg.Height += 70;
+ dlg.ShowDialog();
+ }
+ }
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/ConvertToPortableLibraryProjectBehavior.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/ConvertToPortableLibraryProjectBehavior.cs
new file mode 100644
index 0000000000..9dfda08b30
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/ConvertToPortableLibraryProjectBehavior.cs
@@ -0,0 +1,72 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using ICSharpCode.Build.Tasks;
+using ICSharpCode.SharpDevelop.Project.Converter;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ ///
+ /// Project behavior attached to all non-portable C# and VB projects.
+ ///
+ public class ConvertToPortableLibraryProjectBehavior : ProjectBehavior
+ {
+ public override IEnumerable GetAvailableTargetFrameworks()
+ {
+ return base.GetAvailableTargetFrameworks().Concat(new [] { new PickPortableTargetFramework() });
+ }
+
+ public override void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework)
+ {
+ PortableTargetFramework newFx = newFramework as PortableTargetFramework;
+ if (newFx != null) {
+ // Convert to portable library
+ SD.AnalyticsMonitor.TrackFeature(GetType(), "ConvertToPortableLibrary");
+ var project = (CompilableProject)Project;
+ lock (project.SyncRoot) {
+ if (newVersion != null && GetAvailableCompilerVersions().Contains(newVersion)) {
+ project.ToolsVersion = newVersion.MSBuildVersion.Major + "." + newVersion.MSBuildVersion.Minor;
+ }
+ project.SetProperty(null, null, "TargetFrameworkProfile", newFx.TargetFrameworkProfile, PropertyStorageLocations.Base, true);
+ project.SetProperty(null, null, "TargetFrameworkVersion", newFx.TargetFrameworkVersion, PropertyStorageLocations.Base, true);
+ // Convert
+ project.PerformUpdateOnProjectFile(
+ delegate {
+ foreach (var import in project.MSBuildProjectFile.Imports) {
+ if (import.Project.EndsWith(PortableLibraryProjectBehavior.NormalCSharpTargets, StringComparison.OrdinalIgnoreCase)) {
+ import.Project = PortableLibraryProjectBehavior.PortableTargetsPath + PortableLibraryProjectBehavior.PortableCSharpTargets;
+ break;
+ } else if (import.Project.EndsWith(PortableLibraryProjectBehavior.NormalVBTargets, StringComparison.OrdinalIgnoreCase)) {
+ import.Project = PortableLibraryProjectBehavior.PortableTargetsPath + PortableLibraryProjectBehavior.PortableVBTargets;
+ break;
+ }
+ }
+ });
+ // Remove references
+ foreach (var referenceItem in project.GetItemsOfType(ItemType.Reference).ToArray()) {
+ // get short assembly name:
+ string assemblyName = referenceItem.Include;
+ if (assemblyName.IndexOf(',') >= 0)
+ assemblyName = assemblyName.Substring(0, assemblyName.IndexOf(','));
+ assemblyName += ",";
+ if (KnownFrameworkAssemblies.FullAssemblyNames.Any(fullName => fullName.StartsWith(assemblyName, StringComparison.OrdinalIgnoreCase))) {
+ // If it's a framework assembly, remove the reference
+ // (portable libraries automatically reference all available framework assemblies)
+ ProjectService.RemoveProjectItem(project, referenceItem);
+ }
+ }
+ project.AddProjectType(ProjectTypeGuids.PortableLibrary);
+ project.Save();
+ ProjectBrowserPad.RefreshViewAsync();
+ }
+ } else {
+ base.UpgradeProject(newVersion, newFramework);
+ }
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/PickPortableTargetFramework.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/PickPortableTargetFramework.cs
new file mode 100644
index 0000000000..6d654bd5c9
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/PickPortableTargetFramework.cs
@@ -0,0 +1,58 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using ICSharpCode.Core;
+using ICSharpCode.SharpDevelop.Gui;
+using ICSharpCode.SharpDevelop.Project.Converter;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ ///
+ /// Dummy TargetFramework that displays the SelectProfileDialog.
+ ///
+ sealed class PickPortableTargetFramework : TargetFramework
+ {
+ public PickPortableTargetFramework()
+ : base("PickPortableTargetFramework", Profile.PortableSubsetDisplayName + StringParser.Parse(" (${res:PortableLibrary.ChooseTargetFrameworks})"))
+ {
+ this.MinimumMSBuildVersion = new Version(4, 0);
+ }
+
+ public override bool Equals(object obj)
+ {
+ return obj is PickPortableTargetFramework;
+ }
+
+ public override int GetHashCode()
+ {
+ return 0;
+ }
+
+ public override TargetFramework PickFramework(IEnumerable selectedProjects)
+ {
+ if (ProfileList.IsPortableLibraryInstalled()) {
+ SelectProfileDialog dlg = new SelectProfileDialog(ProfileList.Instance);
+ dlg.Owner = WorkbenchSingleton.MainWindow;
+ if (selectedProjects != null) {
+ var project = selectedProjects.FirstOrDefault() as CompilableProject;
+ if (project != null) {
+ Profile profile = Profile.LoadProfile(project.TargetFrameworkVersion, project.TargetFrameworkProfile);
+ if (profile != null)
+ dlg.SelectedProfile = profile;
+ }
+ }
+ if (dlg.ShowDialog() == true && dlg.SelectedProfile != null) {
+ return new PortableTargetFramework(dlg.SelectedProfile);
+ }
+ } else {
+ new CheckPortableLibraryInstalled().Run();
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/PortableLibraryProjectBehavior.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/PortableLibraryProjectBehavior.cs
new file mode 100644
index 0000000000..41fbcf8f91
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/PortableLibraryProjectBehavior.cs
@@ -0,0 +1,96 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using ICSharpCode.SharpDevelop.Project.Converter;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ ///
+ /// Project behavior for portable library projects.
+ ///
+ public class PortableLibraryProjectBehavior : ProjectBehavior
+ {
+ internal const string PortableTargetsPath = @"$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\";
+ internal const string NormalTargetsPath = @"$(MSBuildToolsPath)\";
+ internal const string PortableCSharpTargets = "Microsoft.Portable.CSharp.targets";
+ internal const string NormalCSharpTargets = "Microsoft.CSharp.targets";
+ internal const string PortableVBTargets = "Microsoft.Portable.VisualBasic.targets";
+ internal const string NormalVBTargets = "Microsoft.VisualBasic.targets";
+
+ public override IEnumerable GetAvailableTargetFrameworks()
+ {
+ TargetFramework[] portableTargets = { this.CurrentTargetFramework, new PickPortableTargetFramework() };
+ if (Project.Language == "C#" || Project.Language == "VBNet") {
+ // we support converting back to regular projects
+ return base.GetAvailableTargetFrameworks().Union(portableTargets);
+ } else {
+ // project must stay portable
+ return portableTargets;
+ }
+ }
+
+ public override TargetFramework CurrentTargetFramework {
+ get {
+ string fxVersion = ((CompilableProject)Project).TargetFrameworkVersion;
+ string fxProfile = ((CompilableProject)Project).TargetFrameworkProfile;
+ Profile profile = Profile.LoadProfile(fxVersion, fxProfile);
+ if (profile != null)
+ return new PortableTargetFramework(profile);
+ else
+ return new PortableTargetFramework(fxVersion, fxProfile);
+ }
+ }
+
+ public override void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework)
+ {
+ var project = (CompilableProject)Project;
+ var newFx = newFramework as PortableTargetFramework;
+ if (newFramework != null && newFx == null) {
+ // convert to normal .NET project (not portable)
+ SD.AnalyticsMonitor.TrackFeature(GetType(), "DowngradePortableLibrary");
+ project.PerformUpdateOnProjectFile(
+ delegate {
+ foreach (var import in project.MSBuildProjectFile.Imports) {
+ if (import.Project.EndsWith(PortableCSharpTargets, StringComparison.OrdinalIgnoreCase)) {
+ import.Project = NormalTargetsPath + NormalCSharpTargets;
+ break;
+ } else if (import.Project.EndsWith(PortableVBTargets, StringComparison.OrdinalIgnoreCase)) {
+ import.Project = NormalTargetsPath + NormalVBTargets;
+ break;
+ }
+ }
+ });
+ project.RemoveProjectType(ProjectTypeGuids.PortableLibrary);
+ AddReferenceIfNotExists("System");
+ AddReferenceIfNotExists("System.Xml");
+ if (newFramework.IsBasedOn(TargetFramework.Net35) || newFramework.IsBasedOn(TargetFramework.Net35Client))
+ AddReferenceIfNotExists("System.Core");
+ base.UpgradeProject(newVersion, newFramework);
+ return;
+ }
+ lock (project.SyncRoot) {
+ if (newVersion != null && GetAvailableCompilerVersions().Contains(newVersion)) {
+ project.ToolsVersion = newVersion.MSBuildVersion.Major + "." + newVersion.MSBuildVersion.Minor;
+ }
+ if (newFx != null) {
+ project.SetProperty(null, null, "TargetFrameworkProfile", newFx.TargetFrameworkProfile, PropertyStorageLocations.Base, true);
+ project.SetProperty(null, null, "TargetFrameworkVersion", newFx.TargetFrameworkVersion, PropertyStorageLocations.Base, true);
+ }
+ project.Save();
+ ProjectBrowserPad.RefreshViewAsync();
+ }
+ }
+
+ void AddReferenceIfNotExists(string name)
+ {
+ if (!(Project.GetItemsOfType(ItemType.Reference).Any(r => string.Equals(r.Include, name, StringComparison.OrdinalIgnoreCase)))) {
+ ProjectService.AddProjectItem(Project, new ReferenceProjectItem(Project, name));
+ }
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/PortableTargetFramework.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/PortableTargetFramework.cs
new file mode 100644
index 0000000000..da92799cd0
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/PortableTargetFramework.cs
@@ -0,0 +1,48 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Xml;
+using System.Xml.Linq;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ public class PortableTargetFramework : TargetFramework
+ {
+ public readonly string TargetFrameworkVersion;
+ public readonly string TargetFrameworkProfile;
+
+ public PortableTargetFramework(string targetFrameworkVersion, string targetFrameworkProfile)
+ : base(targetFrameworkVersion + "-" + targetFrameworkProfile, Profile.PortableSubsetDisplayName + " (" + targetFrameworkVersion + "-" + targetFrameworkProfile + ")")
+ {
+ this.TargetFrameworkVersion = targetFrameworkVersion;
+ this.TargetFrameworkProfile = targetFrameworkProfile;
+ this.MinimumMSBuildVersion = new Version(4, 0);
+ }
+
+ public PortableTargetFramework(Profile profile)
+ : base(profile.TargetFrameworkVersion + "-" + profile.TargetFrameworkProfile, profile.DisplayName)
+ {
+ this.TargetFrameworkVersion = profile.TargetFrameworkVersion;
+ this.TargetFrameworkProfile = profile.TargetFrameworkProfile;
+ this.MinimumMSBuildVersion = new Version(4, 0);
+ }
+
+ public override bool Equals(object obj)
+ {
+ PortableTargetFramework other = obj as PortableTargetFramework;
+ if (other == null)
+ return false;
+ return this.TargetFrameworkVersion == other.TargetFrameworkVersion && this.TargetFrameworkProfile == other.TargetFrameworkProfile;
+ }
+
+ public override int GetHashCode()
+ {
+ return this.TargetFrameworkVersion.GetHashCode() ^ this.TargetFrameworkProfile.GetHashCode();
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/Profile.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/Profile.cs
new file mode 100644
index 0000000000..996bde74ca
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/Profile.cs
@@ -0,0 +1,79 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using System.Xml.Linq;
+using ICSharpCode.Core;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ ///
+ /// Description of Profile.
+ ///
+ public class Profile
+ {
+ public static Profile LoadProfile(string targetFrameworkVersion, string targetFrameworkProfile)
+ {
+ string profileDir = Path.Combine(ProfileList.GetPortableLibraryPath(), targetFrameworkVersion, "Profile", targetFrameworkProfile);
+ return LoadProfile(targetFrameworkVersion, targetFrameworkProfile, profileDir);
+ }
+
+ internal static Profile LoadProfile(string targetFrameworkVersion, string targetFrameworkProfile, string profileDir)
+ {
+ try {
+ List frameworks = new List();
+ foreach (string frameworkFile in Directory.GetFiles(Path.Combine(profileDir, "SupportedFrameworks"), "*.xml")) {
+ XDocument doc = XDocument.Load(frameworkFile);
+ frameworks.Add(new SupportedFramework(doc.Root));
+ }
+ if (frameworks.Count > 0)
+ return new Profile(targetFrameworkVersion, targetFrameworkProfile, frameworks);
+ else
+ return null;
+ } catch (XmlException) {
+ return null;
+ } catch (IOException) {
+ return null;
+ } catch (UnauthorizedAccessException) {
+ return null;
+ }
+ }
+
+ // These must be properties for WPF data binding
+ public string TargetFrameworkVersion { get; private set; }
+ public string TargetFrameworkProfile { get; private set; }
+ public string DisplayName { get; private set; }
+ public IList SupportedFrameworks { get; private set; }
+
+ ///
+ /// Returns ".NET Portable Subset" localized
+ ///
+ public static string PortableSubsetDisplayName {
+ get {
+ return StringParser.Parse("${res:PortableLibrary.PortableSubset}");
+ }
+ }
+
+ public Profile(string targetFrameworkVersion, string targetFrameworkProfile, IList supportedFrameworks)
+ {
+ this.TargetFrameworkVersion = targetFrameworkVersion;
+ this.TargetFrameworkProfile = targetFrameworkProfile;
+ this.SupportedFrameworks = supportedFrameworks;
+
+ this.DisplayName = PortableSubsetDisplayName + " (" + string.Join(", ", supportedFrameworks) + ")";
+ }
+
+ public bool Supports(IList frameworks)
+ {
+ return frameworks.All(
+ requiredFx => SupportedFrameworks.Any(fx => fx.IsMoreGeneralThan(requiredFx))
+ );
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/ProfileList.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/ProfileList.cs
new file mode 100644
index 0000000000..fda1278e05
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/ProfileList.cs
@@ -0,0 +1,105 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Xml;
+using System.Xml.Linq;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ public class ProfileList
+ {
+ internal static string GetPortableLibraryPath()
+ {
+ string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
+ return Path.Combine(programFiles, @"Reference Assemblies\Microsoft\Framework\.NETPortable");
+ }
+
+ public static bool IsPortableLibraryInstalled()
+ {
+ return Directory.Exists(GetPortableLibraryPath());
+ }
+
+ #region LoadProfiles
+ static readonly Lazy instance = new Lazy(LoadProfiles);
+
+ public static ProfileList Instance {
+ get { return instance.Value; }
+ }
+
+ internal static ProfileList LoadProfiles()
+ {
+ ProfileList result = new ProfileList();
+ string path = GetPortableLibraryPath();
+ result.LoadProfiles("v4.0", Path.Combine(path, @"v4.0\Profile"));
+ result.LoadProfiles("v4.5", Path.Combine(path, @"v4.5\Profile"));
+ return result;
+ }
+
+ List list = new List();
+
+ void LoadProfiles(string targetFrameworkVersion, string profilesDir)
+ {
+ string[] profileDirs;
+ try {
+ profileDirs = Directory.GetDirectories(profilesDir);
+ } catch (IOException) {
+ return;
+ } catch (UnauthorizedAccessException) {
+ return;
+ }
+ foreach (string profileDir in profileDirs) {
+ string targetFrameworkProfile = Path.GetFileName(profileDir);
+ var profile = Profile.LoadProfile(targetFrameworkVersion, targetFrameworkProfile, profileDir);
+ if (profile != null)
+ list.Add(profile);
+ }
+ }
+ #endregion
+
+ public IEnumerable AllProfiles {
+ get { return list; }
+ }
+
+ public IEnumerable AllFrameworks {
+ get { return list.SelectMany(p => p.SupportedFrameworks).Distinct(); }
+ }
+
+ ///
+ /// Retrieves all profiles that support all of the given frameworks.
+ ///
+ public IEnumerable GetProfiles(IList frameworks)
+ {
+ if (frameworks == null)
+ throw new ArgumentNullException("frameworks");
+ return list.Where(p => p.Supports(frameworks));
+ }
+
+ ///
+ /// Retrieves the most specific profile that supports all of the given frameworks.
+ /// Returns null if no profile supports the given frameworks.
+ ///
+ public Profile GetBestProfile(IList frameworks)
+ {
+ var candidates = GetProfiles(frameworks).ToList();
+ for (int i = candidates.Count - 1; i >= 0; i--) {
+ for (int j = 0; j < candidates.Count; j++) {
+ if (i != j) {
+ if (candidates[i].Supports(candidates[j].SupportedFrameworks)) {
+ // i is less specific than j, so remove it
+ candidates.RemoveAt(i);
+ break;
+ }
+ }
+ }
+ }
+ // If the portable library profiles are specified properly, there should be at most one result,
+ // so we'll just return that.
+ return candidates.FirstOrDefault();
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/SelectProfileDialog.xaml b/src/Main/Base/Project/Src/Project/PortableLibrary/SelectProfileDialog.xaml
new file mode 100644
index 0000000000..a0522610f4
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/SelectProfileDialog.xaml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/SelectProfileDialog.xaml.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/SelectProfileDialog.xaml.cs
new file mode 100644
index 0000000000..b3f7341a9a
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/SelectProfileDialog.xaml.cs
@@ -0,0 +1,151 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ ///
+ /// Interaction logic for SelectProfileDialog.xaml
+ ///
+ internal partial class SelectProfileDialog : Window, INotifyPropertyChanged
+ {
+ readonly ProfileList profileList;
+ readonly List viewModels;
+
+ public IEnumerable SupportedFrameworkGroups {
+ get { return viewModels; }
+ }
+
+ public SelectProfileDialog(ProfileList profileList)
+ {
+ if (profileList == null)
+ throw new ArgumentNullException("profileList");
+ InitializeComponent();
+ this.profileList = profileList;
+ Debug.WriteLine(string.Join(Environment.NewLine, profileList.AllProfiles.Select(p => p.DisplayName)));
+ viewModels = profileList.AllFrameworks.GroupBy(fx => fx.DisplayName, (key, group) => new SupportedFrameworkGroup(group)).ToList();
+ this.DataContext = this;
+ foreach (var vm in viewModels) {
+ vm.PropertyChanged += delegate { UpdateSelectedProfile(); };
+ }
+ UpdateSelectedProfile();
+ }
+
+ void okButton_Click(object sender, RoutedEventArgs e)
+ {
+ this.DialogResult = true;
+ Close();
+ }
+
+ Profile selectedProfile;
+ bool isSettingProfile;
+
+ public Profile SelectedProfile {
+ get { return selectedProfile; }
+ set {
+ selectedProfile = value;
+ isSettingProfile = true;
+ foreach (var g in viewModels) {
+ if (value == null) {
+ g.IsChecked = false;
+ } else {
+ SupportedFramework version = g.AvailableVersions.Intersect(value.SupportedFrameworks).FirstOrDefault();
+ if (version != null) {
+ g.IsChecked = true;
+ g.SelectedVersion = version;
+ } else {
+ g.IsChecked = false;
+ }
+ }
+ }
+ isSettingProfile = false;
+ PropertyChanged(this, new PropertyChangedEventArgs("SelectedProfile"));
+ }
+ }
+
+ public bool HasTwoOrMoreFrameworksSelected {
+ get { return viewModels.Count(vm => vm.IsChecked) >= 2; }
+ }
+
+ void UpdateSelectedProfile()
+ {
+ PropertyChanged(this, new PropertyChangedEventArgs("HasTwoOrMoreFrameworksSelected"));
+ if (isSettingProfile)
+ return;
+ var requestedFrameworks = (from g in viewModels where g.IsChecked select g.SelectedVersion).ToList();
+ var bestProfile = profileList.GetBestProfile(requestedFrameworks);
+ if (bestProfile != selectedProfile) {
+ selectedProfile = bestProfile;
+ PropertyChanged(this, new PropertyChangedEventArgs("SelectedProfile"));
+ }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged = delegate {};
+ }
+
+ ///
+ /// View model used in SelectProfileDialog
+ ///
+ sealed class SupportedFrameworkGroup : INotifyPropertyChanged
+ {
+ readonly IList availableVersions;
+ bool isChecked;
+ SupportedFramework selectedVersion;
+
+ public SupportedFrameworkGroup(IEnumerable availableVersions)
+ {
+ this.availableVersions = availableVersions.OrderBy(v => v.MinimumVersion).ToList();
+ this.isChecked = true;
+ this.selectedVersion = this.availableVersions.First();
+ }
+
+ public IList AvailableVersions {
+ get { return availableVersions; }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ private void OnPropertyChanged(string propertyName)
+ {
+ if (PropertyChanged != null) {
+ PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+
+ public string DisplayName {
+ get { return availableVersions[0].DisplayName; }
+ }
+
+ public bool IsChecked {
+ get { return isChecked; }
+ set {
+ if (isChecked != value) {
+ isChecked = value;
+ OnPropertyChanged("IsChecked");
+ }
+ }
+ }
+
+ public SupportedFramework SelectedVersion {
+ get { return selectedVersion; }
+ set {
+ if (selectedVersion != value) {
+ selectedVersion = value;
+ OnPropertyChanged("SelectedVersion");
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/SupportedFramework.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/SupportedFramework.cs
new file mode 100644
index 0000000000..897be87312
--- /dev/null
+++ b/src/Main/Base/Project/Src/Project/PortableLibrary/SupportedFramework.cs
@@ -0,0 +1,93 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Xml.Linq;
+
+namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
+{
+ ///
+ /// A supported framework for portable libraries.
+ ///
+ public class SupportedFramework
+ {
+ // These are properties for WPF data binding
+ public string Identifier { get; private set; }
+ public string Profile { get; private set; }
+ public Version MinimumVersion { get; private set; }
+ public string DisplayName { get; private set; }
+ public string MinimumVersionDisplayName { get; private set; }
+
+ public SupportedFramework(string identifier, Version minimumVersion = null, string profile = "*", string displayName = null, string minimumVersionDisplayName = null)
+ {
+ if (identifier == null)
+ throw new ArgumentNullException("identifier");
+ if (profile == null)
+ throw new ArgumentNullException("profile");
+ this.Identifier = identifier;
+ this.MinimumVersion = minimumVersion;
+ this.Profile = profile;
+ this.DisplayName = displayName ?? identifier;
+ this.MinimumVersionDisplayName = minimumVersionDisplayName ?? (minimumVersion != null ? minimumVersion.ToString() : null);
+ }
+
+ internal SupportedFramework(XElement framework)
+ {
+ this.Identifier = (string)framework.Attribute("Identifier") ?? string.Empty;
+ this.Profile = (string)framework.Attribute("Profile") ?? "*";
+ Version minimumVersion;
+ if (Version.TryParse((string)framework.Attribute("MinimumVersion"), out minimumVersion))
+ this.MinimumVersion = minimumVersion;
+ this.DisplayName = (string)framework.Attribute("DisplayName");
+ this.MinimumVersionDisplayName = (string)framework.Attribute("MinimumVersionDisplayName");
+ }
+
+ public override string ToString()
+ {
+ if (string.IsNullOrEmpty(this.MinimumVersionDisplayName))
+ return this.DisplayName;
+ else
+ return this.DisplayName + " " + this.MinimumVersionDisplayName;
+ }
+
+ public override bool Equals(object obj)
+ {
+ SupportedFramework other = obj as SupportedFramework;
+ if (other == null)
+ return false;
+ return this.Identifier == other.Identifier && this.Profile == other.Profile && object.Equals(this.MinimumVersion, other.MinimumVersion) && this.DisplayName == other.DisplayName && this.MinimumVersionDisplayName == other.MinimumVersionDisplayName;
+ }
+
+ public override int GetHashCode()
+ {
+ int hashCode = 0;
+ unchecked {
+ if (Identifier != null)
+ hashCode += 1000000007 * Identifier.GetHashCode();
+ if (Profile != null)
+ hashCode += 1000000009 * Profile.GetHashCode();
+ if (MinimumVersion != null)
+ hashCode += 1000000021 * MinimumVersion.GetHashCode();
+ }
+ return hashCode;
+ }
+
+ ///
+ /// Gets whether this supported framework is a more general version of the specified framework.
+ ///
+ public bool IsMoreGeneralThan(SupportedFramework fx)
+ {
+ if (this.Identifier != fx.Identifier)
+ return false;
+ if (this.Profile.EndsWith("*", StringComparison.OrdinalIgnoreCase)) {
+ string prefix = this.Profile.Substring(0, this.Profile.Length - 1);
+ if (!fx.Profile.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
+ return false;
+ } else {
+ if (!this.Profile.Equals(fx.Profile, StringComparison.OrdinalIgnoreCase))
+ return false;
+ }
+ return this.MinimumVersion <= fx.MinimumVersion;
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs b/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs
index 05e0bd1c4f..d73ec0e207 100644
--- a/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs
+++ b/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs
@@ -22,5 +22,6 @@ namespace ICSharpCode.SharpDevelop.Project
public const string WebApplication = "{349C5851-65DF-11DA-9384-00065B846F21}";
public const string WebSite = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}";
public const string Silverlight = "{A1591282-1198-4647-A2B1-27E5FF5F6F3B}";
+ public static readonly Guid PortableLibrary = Guid.Parse("{786C830F-07A1-408B-BD7F-6EE04809D6DB}");
}
}
diff --git a/src/Main/Base/Project/Src/Project/Solution/Solution.cs b/src/Main/Base/Project/Src/Project/Solution/Solution.cs
index 052a576ce5..52bf8e93be 100644
--- a/src/Main/Base/Project/Src/Project/Solution/Solution.cs
+++ b/src/Main/Base/Project/Src/Project/Solution/Solution.cs
@@ -271,22 +271,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
IProject project = folder as IProject;
if (project != null && !isLoading) {
- var projectConfigurations = project.ConfigurationNames;
- var solutionConfigurations = this.GetConfigurationNames();
- var projectPlatforms = project.PlatformNames;
- var solutionPlatforms = this.GetPlatformNames();
- foreach (string config in solutionConfigurations) {
- string projectConfig = config;
- if (!projectConfigurations.Contains(projectConfig))
- projectConfig = projectConfigurations.FirstOrDefault() ?? "Debug";
- foreach (string platform in solutionPlatforms) {
- string projectPlatform = FixPlatformNameForProject(platform);
- if (!projectPlatforms.Contains(projectPlatform))
- projectPlatform = projectPlatforms.FirstOrDefault() ?? "AnyCPU";
-
- CreateMatchingItem(config, platform, project, projectConfig + "|" + FixPlatformNameForSolution(projectPlatform));
- }
- }
+ FixSolutionConfiguration(new[] { project });
}
}
@@ -696,38 +681,59 @@ namespace ICSharpCode.SharpDevelop.Project
return new SolutionItem("Debug|Any CPU", "Debug|Any CPU");
}
+ ///
+ /// Repairs the solution configuration to project configuration mapping for the specified projects.
+ ///
public bool FixSolutionConfiguration(IEnumerable projects)
{
ProjectSection solSec = GetSolutionConfigurationsSection();
ProjectSection prjSec = GetProjectConfigurationsSection();
bool changed = false;
- SortedSet configurations = new SortedSet();
-
- foreach (IProject project in projects) {
- string guid = project.IdGuid.ToUpperInvariant();
- string platform = FixPlatformNameForSolution(project.ActivePlatform);
- foreach (string configuration in new string[]{"Debug", "Release"}) {
- string key = configuration + "|" + platform;
- configurations.Add(key);
-
- string searchKey = guid + "." + key + ".Build.0";
- if (!prjSec.Items.Exists(item => item.Name == searchKey)) {
- prjSec.Items.Add(new SolutionItem(searchKey, key));
- changed = true;
- }
-
- searchKey = guid + "." + key + ".ActiveCfg";
- if (!prjSec.Items.Exists(item => item.Name == searchKey)) {
- prjSec.Items.Add(new SolutionItem(searchKey, key));
+ var solutionConfigurations = this.GetConfigurationNames();
+ var solutionPlatforms = this.GetPlatformNames();
+
+ // Create configurations/platforms if none exist
+ if (solutionConfigurations.Count == 0) {
+ solutionConfigurations.Add("Debug");
+ solutionConfigurations.Add("Release");
+ }
+ if (solutionPlatforms.Count == 0) {
+ solutionPlatforms.Add("Any CPU");
+ }
+
+ // Ensure all solution configurations/platforms exist in the SolutionConfigurationPlatforms section:
+ foreach (string config in solutionConfigurations) {
+ foreach (string platform in solutionPlatforms) {
+ string key = config + "|" + platform;
+ if (!solSec.Items.Exists(item => key.Equals(item.Location, StringComparison.OrdinalIgnoreCase) && key.Equals(item.Name, StringComparison.OrdinalIgnoreCase))) {
+ solSec.Items.Add(new SolutionItem(key, key));
changed = true;
}
}
}
- foreach (string key in configurations) {
- if (!solSec.Items.Exists(item => item.Location == key && item.Name == key)) {
- solSec.Items.Add(new SolutionItem(key, key));
- changed = true;
+ // Ensure all solution configurations/platforms are mapped to a project configuration:
+ foreach (var project in projects) {
+ string guid = project.IdGuid.ToUpperInvariant();
+ var projectConfigurations = project.ConfigurationNames;
+ var projectPlatforms = project.PlatformNames;
+ foreach (string config in solutionConfigurations) {
+ string projectConfig = config;
+ if (!projectConfigurations.Contains(projectConfig))
+ projectConfig = projectConfigurations.FirstOrDefault() ?? "Debug";
+ foreach (string platform in solutionPlatforms) {
+ string activeCfgKey = guid + "." + config + "|" + platform + ".ActiveCfg";
+ // Only add the mapping if the ActiveCfg is not specified.
+ // If ActiveCfg is specific but Build.0 isn't, we don't add the Build.0.
+ if (!prjSec.Items.Exists(item => activeCfgKey.Equals(item.Name, StringComparison.OrdinalIgnoreCase))) {
+ string projectPlatform = FixPlatformNameForProject(platform);
+ if (!projectPlatforms.Contains(projectPlatform))
+ projectPlatform = projectPlatforms.FirstOrDefault() ?? "AnyCPU";
+
+ changed = true;
+ CreateMatchingItem(config, platform, project, projectConfig + "|" + FixPlatformNameForSolution(projectPlatform));
+ }
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Project/TargetFramework.cs b/src/Main/Base/Project/Src/Project/TargetFramework.cs
index 4592c2c4e7..05d0badcf6 100644
--- a/src/Main/Base/Project/Src/Project/TargetFramework.cs
+++ b/src/Main/Base/Project/Src/Project/TargetFramework.cs
@@ -2,6 +2,8 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections.Generic;
+using ICSharpCode.SharpDevelop.Project.Converter;
namespace ICSharpCode.SharpDevelop.Project
{
@@ -116,6 +118,11 @@ namespace ICSharpCode.SharpDevelop.Project
///
public TargetFramework BasedOn { get; set; }
+ public virtual bool IsCompatibleWith(CompilerVersion compilerVersion)
+ {
+ return MinimumMSBuildVersion <= compilerVersion.MSBuildVersion;
+ }
+
public bool IsBasedOn(TargetFramework potentialBase)
{
TargetFramework tmp = this;
@@ -131,6 +138,15 @@ namespace ICSharpCode.SharpDevelop.Project
{
return DisplayName;
}
+
+ ///
+ /// Shows a dialog to pick the target framework.
+ /// This method is called by the UpgradeView 'convert' button to retrieve the actual target framework
+ ///
+ public virtual TargetFramework PickFramework(IEnumerable selectedProjects)
+ {
+ return this;
+ }
}
public class ClientProfileTargetFramework : TargetFramework
diff --git a/src/Main/Base/Project/Src/Project/UnknownProject.cs b/src/Main/Base/Project/Src/Project/UnknownProject.cs
index efdc1c23e4..ddb1f71da8 100644
--- a/src/Main/Base/Project/Src/Project/UnknownProject.cs
+++ b/src/Main/Base/Project/Src/Project/UnknownProject.cs
@@ -52,5 +52,10 @@ namespace ICSharpCode.SharpDevelop.Project
return projectBehavior;
}
}
+
+ public override bool HasProjectType(Guid projectTypeGuid)
+ {
+ return false;
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs b/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs
index 1e6df4f14e..5adc72d02c 100644
--- a/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs
+++ b/src/Main/Base/Project/Src/Services/Debugger/BreakpointBookmark.cs
@@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Linq;
using System.Windows.Media;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
@@ -90,6 +91,11 @@ namespace ICSharpCode.SharpDevelop.Debugging
this.condition = script;
}
+ public const string BreakpointMarker = "Breakpoint";
+
+ public static readonly Color DefaultBackground = Color.FromRgb(180, 38, 38);
+ public static readonly Color DefaultForeground = Colors.White;
+
public static readonly IImage BreakpointImage = new ResourceServiceImage("Bookmarks.Breakpoint");
public static readonly IImage BreakpointConditionalImage = new ResourceServiceImage("Bookmarks.BreakpointConditional");
public static readonly IImage DisabledBreakpointImage = new ResourceServiceImage("Bookmarks.DisabledBreakpoint");
@@ -111,10 +117,20 @@ namespace ICSharpCode.SharpDevelop.Debugging
{
IDocumentLine line = this.Document.GetLineByNumber(this.LineNumber);
ITextMarker marker = markerService.Create(line.Offset, line.Length);
- marker.BackgroundColor = Color.FromRgb(180, 38, 38);
- marker.ForegroundColor = Colors.White;
- marker.MarkerColor = Color.FromRgb(180, 38, 38);
+ ISyntaxHighlighter highlighter = this.Document.GetService(typeof(ISyntaxHighlighter)) as ISyntaxHighlighter;
+ marker.BackgroundColor = DefaultBackground;
+ marker.ForegroundColor = DefaultForeground;
+ marker.MarkerColor = DefaultBackground;
marker.MarkerTypes = TextMarkerTypes.CircleInScrollBar;
+
+ if (highlighter != null) {
+ var color = highlighter.GetNamedColor(BreakpointMarker);
+ if (color != null) {
+ marker.BackgroundColor = color.Background.GetColor(null);
+ marker.MarkerColor = color.Background.GetColor(null) ?? DefaultBackground;
+ marker.ForegroundColor = color.Foreground.GetColor(null);
+ }
+ }
return marker;
}
diff --git a/src/Main/Base/Project/Src/Services/Debugger/CurrentLineBookmark.cs b/src/Main/Base/Project/Src/Services/Debugger/CurrentLineBookmark.cs
index ec00247945..a3e53649da 100644
--- a/src/Main/Base/Project/Src/Services/Debugger/CurrentLineBookmark.cs
+++ b/src/Main/Base/Project/Src/Services/Debugger/CurrentLineBookmark.cs
@@ -66,11 +66,14 @@ namespace ICSharpCode.SharpDevelop.Debugging
}
public override bool CanToggle {
- get {
- return false;
- }
+ get { return false; }
}
+ public const string Name = "Current statement";
+
+ public static readonly Color DefaultBackground = Colors.Yellow;
+ public static readonly Color DefaultForeground = Colors.Blue;
+
public override int ZOrder {
get { return 100; }
}
@@ -91,8 +94,17 @@ namespace ICSharpCode.SharpDevelop.Debugging
{
IDocumentLine line = this.Document.GetLineByNumber(startLine);
ITextMarker marker = markerService.Create(line.Offset + startColumn - 1, Math.Max(endColumn - startColumn, 1));
- marker.BackgroundColor = Colors.Yellow;
- marker.ForegroundColor = Colors.Blue;
+ ISyntaxHighlighter highlighter = this.Document.GetService(typeof(ISyntaxHighlighter)) as ISyntaxHighlighter;
+ marker.BackgroundColor = DefaultBackground;
+ marker.ForegroundColor = DefaultForeground;
+
+ if (highlighter != null) {
+ var color = highlighter.GetNamedColor(Name);
+ if (color != null) {
+ marker.BackgroundColor = color.Background.GetColor(null);
+ marker.ForegroundColor = color.Foreground.GetColor(null);
+ }
+ }
return marker;
}
diff --git a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
index 0cd67e3b5e..fc7973db95 100644
--- a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
+++ b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
@@ -205,7 +205,6 @@ namespace ICSharpCode.SharpDevelop.Project
newProject.IdGuid = Guid.NewGuid().ToString().ToUpperInvariant();
}
solutionFolderNode.Container.AddFolder(newProject);
- solutionFolderNode.Solution.FixSolutionConfiguration(new IProject[] { newProject });
OnProjectAdded(new ProjectEventArgs(newProject));
}
@@ -402,19 +401,6 @@ namespace ICSharpCode.SharpDevelop.Project
return;
}
solution.AddFolder(project);
- ProjectSection configSection = solution.GetSolutionConfigurationsSection();
- foreach (string configuration in project.ConfigurationNames) {
- foreach (string platform in project.PlatformNames) {
- string key;
- if (platform == "AnyCPU") { // Fix for SD2-786
- key = configuration + "|Any CPU";
- } else {
- key = configuration + "|" + platform;
- }
- configSection.Items.Add(new SolutionItem(key, key));
- }
- }
- solution.FixSolutionConfiguration(new IProject[] { project });
if (FileUtility.ObservedSave((NamedFileOperationDelegate)solution.Save, solutionFile) == FileOperationResult.OK) {
// only load when saved succesfully
diff --git a/src/Main/Base/Project/Src/Services/Tasks/ErrorPainter.cs b/src/Main/Base/Project/Src/Services/Tasks/ErrorPainter.cs
index 8b0f1e0deb..35d489ac8a 100644
--- a/src/Main/Base/Project/Src/Services/Tasks/ErrorPainter.cs
+++ b/src/Main/Base/Project/Src/Services/Tasks/ErrorPainter.cs
@@ -2,11 +2,13 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
+using System.Collections.Generic;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Editor;
+using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.SharpDevelop
{
@@ -20,6 +22,7 @@ namespace ICSharpCode.SharpDevelop
public ErrorPainter(ITextEditor textEditor)
{
+ instances.Add(this);
this.textEditor = textEditor;
this.markerService = this.textEditor.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
@@ -33,6 +36,10 @@ namespace ICSharpCode.SharpDevelop
DebuggerService.DebugStopped += OnDebugStartedStopped;
textEditor.Options.PropertyChanged += textEditor_Options_PropertyChanged;
+ ErrorColor = Colors.Red;
+ WarningColor = Colors.Orange;
+ MessageColor = Colors.Blue;
+
UpdateEnabled();
}
@@ -54,6 +61,56 @@ namespace ICSharpCode.SharpDevelop
DebuggerService.DebugStopped -= OnDebugStartedStopped;
textEditor.Options.PropertyChanged -= textEditor_Options_PropertyChanged;
ClearErrors();
+ instances.Remove(this);
+ }
+
+ static readonly List instances = new List();
+
+ public static IEnumerable Instances {
+ get {
+ WorkbenchSingleton.AssertMainThread();
+ return instances;
+ }
+ }
+
+ public const string ErrorColorName = "Error marker";
+ public const string WarningColorName = "Warning marker";
+ public const string MessageColorName = "Message marker";
+
+ Color errorColor;
+
+ public Color ErrorColor {
+ get { return errorColor; }
+ set {
+ if (errorColor != value) {
+ errorColor = value;
+ UpdateErrors();
+ }
+ }
+ }
+
+ Color warningColor;
+
+ public Color WarningColor {
+ get { return warningColor; }
+ set {
+ if (warningColor != value) {
+ warningColor = value;
+ UpdateErrors();
+ }
+ }
+ }
+
+ Color messageColor;
+
+ public Color MessageColor {
+ get { return messageColor; }
+ set {
+ if (messageColor != value) {
+ messageColor = value;
+ UpdateErrors();
+ }
+ }
}
bool isEnabled;
@@ -149,13 +206,13 @@ namespace ICSharpCode.SharpDevelop
switch (task.TaskType) {
case TaskType.Error:
- markerColor = Colors.Red;
+ markerColor = ErrorColor;
break;
case TaskType.Message:
- markerColor = Colors.Blue;
+ markerColor = MessageColor;
break;
case TaskType.Warning:
- markerColor = Colors.Orange;
+ markerColor = WarningColor;
break;
}
diff --git a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs
index 85342b6e67..789142c4a7 100644
--- a/src/Main/Base/Project/Src/Util/ExtensionMethods.cs
+++ b/src/Main/Base/Project/Src/Util/ExtensionMethods.cs
@@ -19,6 +19,7 @@ using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.NRefactory.Utils;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Parser;
@@ -200,6 +201,11 @@ namespace ICSharpCode.SharpDevelop
return result;
}
+ public static IEnumerable DistinctBy(this IEnumerable input, Func keySelector)
+ {
+ return input.Distinct(KeyComparer.Create(keySelector));
+ }
+
///
/// Sets the Content property of the specified ControlControl to the specified content.
/// If the content is a Windows-Forms control, it is wrapped in a WindowsFormsHost.
diff --git a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
index 969196d606..8e8709a102 100644
--- a/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
@@ -57,6 +57,11 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).SingleOrDefault() as ServiceReferencesProjectItem;
}
+ int GetHowManyWCFMetadataItemsInMSBuildProject()
+ {
+ return msbuildProject.GetItemsOfType(ItemType.ServiceReferences).Count();
+ }
+
ProjectItem GetFileProjectItemInMSBuildProject(string fileName)
{
return msbuildProject.Items.SingleOrDefault(item => item.FileName == fileName);
@@ -169,6 +174,21 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
Assert.AreEqual("Service References", item.Include);
}
+ [Test]
+ public void AddServiceReferenceProxyFile_ProjectHasServiceReferences_WCFMetadataItemNotAddedToProjectForServiceReferencesRootFolder()
+ {
+ CreateProjectWithMSBuildProject();
+ var proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service1" };
+ project.AddServiceReferenceProxyFile(proxyFileName);
+ proxyFileName = new ServiceReferenceFileName() { ServiceName = "Service2" };
+
+ project.AddServiceReferenceProxyFile(proxyFileName);
+
+ int count = GetHowManyWCFMetadataItemsInMSBuildProject();
+
+ Assert.AreEqual(1, count);
+ }
+
[Test]
public void AddServiceReferenceProxyFile_ProjectHasNoServiceReferences_WCFMetadataStorageItemAddedToProjectForServiceReferencesFolder()
{
diff --git a/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs b/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs
index d60e7b5bb2..fbd4ba2c35 100644
--- a/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs
+++ b/src/Main/Core/Project/Src/Services/PropertyService/Properties.cs
@@ -40,6 +40,11 @@ namespace ICSharpCode.Core
///
public sealed class Properties : INotifyPropertyChanged, ICloneable
{
+ ///
+ /// Gets the version number of the XML file format.
+ ///
+ public static readonly Version FileVersion = new Version(2, 0, 0);
+
// Properties instances form a tree due to the nested properties containers.
// All nodes in such a tree share the same syncRoot in order to simplify synchronization.
// When an existing node is added to a tree, its syncRoot needs to change.
diff --git a/src/Main/ICSharpCode.SharpDevelop.Widgets/Project/BoolToVisibilityConverter.cs b/src/Main/ICSharpCode.SharpDevelop.Widgets/Project/BoolToVisibilityConverter.cs
new file mode 100644
index 0000000000..efee56abc9
--- /dev/null
+++ b/src/Main/ICSharpCode.SharpDevelop.Widgets/Project/BoolToVisibilityConverter.cs
@@ -0,0 +1,36 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
+// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
+
+using System;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+
+namespace ICSharpCode.SharpDevelop.Widgets
+{
+ [ValueConversion(typeof(bool), typeof(Visibility))]
+ public class BoolToVisibilityConverter : IValueConverter
+ {
+ public Visibility TrueValue { get; set; }
+ public Visibility FalseValue { get; set; }
+
+ public BoolToVisibilityConverter()
+ {
+ this.TrueValue = Visibility.Visible;
+ this.FalseValue = Visibility.Collapsed;
+ }
+
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if ((value as bool?) == true)
+ return TrueValue;
+ else
+ return FalseValue;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return value is Visibility && (Visibility)value == TrueValue;
+ }
+ }
+}
diff --git a/src/Main/ICSharpCode.SharpDevelop.Widgets/Project/ICSharpCode.SharpDevelop.Widgets.csproj b/src/Main/ICSharpCode.SharpDevelop.Widgets/Project/ICSharpCode.SharpDevelop.Widgets.csproj
index 4630ea0fea..9f774ffd1f 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Widgets/Project/ICSharpCode.SharpDevelop.Widgets.csproj
+++ b/src/Main/ICSharpCode.SharpDevelop.Widgets/Project/ICSharpCode.SharpDevelop.Widgets.csproj
@@ -63,6 +63,7 @@
Configuration\GlobalAssemblyInfo.cs
+
diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs
index 4223244f34..b1d3d3c5ab 100644
--- a/src/Setup/Files.wxs
+++ b/src/Setup/Files.wxs
@@ -835,7 +835,7 @@
-
+
@@ -851,6 +851,8 @@
+
+