[附件解决方案]CruiseControl.NET 超冷门”BUG” 关键字:VstsHistoryParser ParseChangeSet CheckForModifications FormatException

先说怎么解决问题,两步

首先下载这个DLL:https://files.cnblogs.com/kkun/ThoughtWorks.CruiseControl.Core.zip

其次想办法把程序集版本号和文件号改成与你现行版本一致(such as Reflector),例如

[assembly: AssemblyCompanyAttribute("ThoughtWorks Inc.")]
[assembly: AssemblyProductAttribute("CruiseControl.NET")]
[assembly: AssemblyCopyrightAttribute("Copyright ? 2003 - 2011 ThoughtWorks Inc.")]
[assembly: AssemblyTrademarkAttribute("")]
[assembly: AssemblyVersionAttribute("1.7.677.8065")]
[assembly: AssemblyFileVersionAttribute("1.7.677.8065")]

改完后替换现有DLL:ThoughtWorks.CruiseControl.Core.dll就可以了

不明白发邮件给我,注明CCNET日期解析错误,先说一声,升级成最新的版本也不好使,要么修改TFS服务器端语言为英文,要么使用我这个附件,再要么,直接修改发布源码,

源码在这里:http://build.nauck-it.de/download/CruiseControl.NET/

------------------------------分隔线,下边是发现问题历程,可以不看,解决问题上边就足够了--------------------------------------

CruiseControl.NET 超冷门”BUG”

image

原因如下,各项配置均按照官网文档来配置,最后死活编译不通过,N遍GOOGLE,BAIDU,BIYING总也找不到解决的办法!

只有微软社区和CODEPROJECT两个网站有上说人问,答案是去官网提问...谢特

OK,我先把搜索关键字搞出来,为方便以后的兄弟们

VstsHistoryParser ParseChangeSet CheckForModifications FormatException

甚至还更改了WINDOWS的语言设置,再不行就打算反编译DLL看了(实际上后来确实这么搞了!)

直到最后从官网的BUG 系统里搜索到了

完整的异常:

System.FormatException: 该字符串未被识别为有效的 DateTime。 在 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) 在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.VstsHistoryParser.ParseChangeSet(StringBuilder changeSet) 在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.VstsHistoryParser.Parse(TextReader vstsLog, DateTime from, DateTime to) 在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.Vsts.GetModifications(IIntegrationResult from, IIntegrationResult to) 在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModificationsWithLogging(ISourceControl sc, IIntegrationResult from, IIntegrationResult to) 在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl sourceControl, IIntegrationResult lastBuild, IIntegrationResult thisBuild) 在 ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult from, IIntegrationResult to) 在 ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request)

报告中的部分内容

<exception><![CDATA[System.FormatException: 该字符串未被识别为有效的 DateTime。
   在 System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.VstsHistoryParser.ParseChangeSet(StringBuilder changeSet)
   在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.VstsHistoryParser.Parse(TextReader vstsLog, DateTime from, DateTime to)
   在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.Vsts.GetModifications(IIntegrationResult from, IIntegrationResult to)
   在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModificationsWithLogging(ISourceControl sc, IIntegrationResult from, IIntegrationResult to)
   在 ThoughtWorks.CruiseControl.Core.Sourcecontrol.QuietPeriod.GetModifications(ISourceControl sourceControl, IIntegrationResult lastBuild, IIntegrationResult thisBuild)
   在 ThoughtWorks.CruiseControl.Core.IntegrationRunner.GetModifications(IIntegrationResult from, IIntegrationResult to)
   在 ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request)]]></exception>
 
 
解决路径
先是搜索CheckForModifications连接到以下网站
http://social.msdn.microsoft.com/Forums/en-US/tfsbuild/thread/13c70df2-365c-4703-8acb-521e40cf535b
该页面中建议去官网BUG列表中查看是否有人提过,是否是BUG,转到官网BUG列表
http://jira.public.thoughtworks.org/secure/IssueNavigator.jspa
搜索关键字 ParseChangeSet
image
再转到
http://jira.public.thoughtworks.org/browse/CCNET-2055
看描述 
大概意思是说,有个codepage参数文档里没有写,只要写上正确的代码就OK,不需要FIX云云,我晕倒...让我欣慰的是问题解决了!解决了!决了!了!! !
在sourcecontrol节点里加上cpdepage就OK,936哪来的??页面搜索"Chinese Simplified",不用拼写全就找到了,在接近崩溃的边缘时找到了答案...记录之,记录之!
image
问题是如何产生的呢?
大概意思是说,CCNET里有个正则无法匹配"Checked in by"字符串
原文及原文地址http://jira.public.thoughtworks.org/browse/CCNET-2025;jsessionid=8F99BE6470470E42774287431F019E83?page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel
The problem: TFS allow users to commit on behalf of other user. If a changeset been commited that way , the output of the TF history look like this :
2011-03-21 11:50:48,489 [15:DEBUG] [scrliv2 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe] -------------------------------------------------------------------------------
2011-03-21 11:50:48,493 [15:DEBUG] [scrliv2 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe] Changeset: 128812
2011-03-21 11:50:48,494 [15:DEBUG] [scrliv2 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe] User: USERA
2011-03-21 11:50:48,494 [15:DEBUG] [scrliv2 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe] Checked in by: USERB
2011-03-21 11:50:48,495 [15:DEBUG] [scrliv2 C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe] Date: 21 mars 2011 11:43:54
In the VstsHistoryParser.cs file, the regex for parsing the changset does not support the "Checked in by" line :
           Regex parser = new Regex(@"Changeset:[ \t](?<changenumber>[0-9]*)\r\nUser:[ \t](?<author>.*)\r\nDate:[ \t](?<date>.*)\r\n\r\nComment:(?<comment>(?:\r\n.*)*)\r\n\r\nItems:(?<items>(?:\r\n.*)*)\r\n\r\n");
解决问题的原文如下

Not documented configuration parameter (<codepage>) fro tfs (vsts).
if you are using different code page (non english, non utf8) with tfs you have to set codepage parameter. But you don't know anything about this parameter because it is not documented.
Exception occours at ThoughtWorks.CruiseControl.Core.Sourcecontrol.VstsHistoryParser.ParseChangeSet but no need to fix this from the code just set the codepage paremeter what you are using.
Exampe for Turkish (windows-1254):
......
<sourcecontrol type="vsts" autoGetSource="true">
<executable>$(TFExe)</executable>
<server>$(TFSAddress)</server>
<domain>$(DOMAINNAME)</domain>
<username>$(TFSUser)</username>
<password>$(TFSPassword)</password>
<project>$(TFSPATH)</project>
<workingDirectory>$(ProjectDir)</workingDirectory>
<cleanCopy>false</cleanCopy>
<workspace>$(WSPrefix)$(PROJECT_NAME)</workspace>
<deleteWorkspace>false</deleteWorkspace>
<codepage>1254</codepage>
</sourcecontrol>
......
Code Pages:
37 IBM037 IBM EBCDIC (US-Canada)
437 IBM437 OEM United States
500 IBM500 IBM EBCDIC (International)
708 ASMO-708 Arabic (ASMO 708)
720 DOS-720 Arabic (DOS)
737 ibm737 Greek (DOS)
775 ibm775 Baltic (DOS)
850 ibm850 Western European (DOS)
852 ibm852 Central European (DOS)
855 IBM855 OEM Cyrillic
857 ibm857 Turkish (DOS)
858 IBM00858 OEM Multilingual Latin I
860 IBM860 Portuguese (DOS)
861 ibm861 Icelandic (DOS)
862 DOS-862 Hebrew (DOS)
863 IBM863 French Canadian (DOS)
864 IBM864 Arabic (864)
865 IBM865 Nordic (DOS)
866 cp866 Cyrillic (DOS)
869 ibm869 Greek, Modern (DOS)
870 IBM870 IBM EBCDIC (Multilingual Latin-2)
874 windows-874 Thai (Windows)
875 cp875 IBM EBCDIC (Greek Modern)
932 shift_jis Japanese (Shift-JIS)
936 gb2312 Chinese Simplified (GB2312)
949 ks_c_5601-1987 Korean
950 big5 Chinese Traditional (Big5)
1026 IBM1026 IBM EBCDIC (Turkish Latin-5)
1047 IBM01047 IBM Latin-1
1140 IBM01140 IBM EBCDIC (US-Canada-Euro)
1141 IBM01141 IBM EBCDIC (Germany-Euro)
1142 IBM01142 IBM EBCDIC (Denmark-Norway-Euro)
1143 IBM01143 IBM EBCDIC (Finland-Sweden-Euro)
1144 IBM01144 IBM EBCDIC (Italy-Euro)
1145 IBM01145 IBM EBCDIC (Spain-Euro)
1146 IBM01146 IBM EBCDIC (UK-Euro)
1147 IBM01147 IBM EBCDIC (France-Euro)
1148 IBM01148 IBM EBCDIC (International-Euro)
1149 IBM01149 IBM EBCDIC (Icelandic-Euro)
1200 utf-16 Unicode
1201 unicodeFFFE Unicode (Big-Endian)
1250 windows-1250 Central European (Windows)
1251 windows-1251 Cyrillic (Windows)
1252 Windows-1252 Western European (Windows)
1253 windows-1253 Greek (Windows)
1254 windows-1254 Turkish (Windows)
1255 windows-1255 Hebrew (Windows)
1256 windows-1256 Arabic (Windows)
1257 windows-1257 Baltic (Windows)
1258 windows-1258 Vietnamese (Windows)
1361 Johab Korean (Johab)
10000 macintosh Western European (Mac)
10001 x-mac-japanese Japanese (Mac)
10002 x-mac-chinesetrad Chinese Traditional (Mac)
10003 x-mac-korean Korean (Mac)
10004 x-mac-arabic Arabic (Mac)
10005 x-mac-hebrew Hebrew (Mac)
10006 x-mac-greek Greek (Mac)
10007 x-mac-cyrillic Cyrillic (Mac)
10008 x-mac-chinesesimp Chinese Simplified (Mac)
10010 x-mac-romanian Romanian (Mac)
10017 x-mac-ukrainian Ukrainian (Mac)
10021 x-mac-thai Thai (Mac)
10029 x-mac-ce Central European (Mac)
10079 x-mac-icelandic Icelandic (Mac)
10081 x-mac-turkish Turkish (Mac)
10082 x-mac-croatian Croatian (Mac)
12000 utf-32 Unicode (UTF-32)
12001 utf-32BE Unicode (UTF-32 Big-Endian)
20000 x-Chinese-CNS Chinese Traditional (CNS)
20001 x-cp20001 TCA Taiwan
20002 x-Chinese-Eten Chinese Traditional (Eten)
20003 x-cp20003 IBM5550 Taiwan
20004 x-cp20004 TeleText Taiwan
20005 x-cp20005 Wang Taiwan
20105 x-IA5 Western European (IA5)
20106 x-IA5-German German (IA5)
20107 x-IA5-Swedish Swedish (IA5)
20108 x-IA5-Norwegian Norwegian (IA5)
20127 us-ascii US-ASCII
20261 x-cp20261 T.61
20269 x-cp20269 ISO-6937
20273 IBM273 IBM EBCDIC (Germany)
20277 IBM277 IBM EBCDIC (Denmark-Norway)
20278 IBM278 IBM EBCDIC (Finland-Sweden)
20280 IBM280 IBM EBCDIC (Italy)
20284 IBM284 IBM EBCDIC (Spain)
20285 IBM285 IBM EBCDIC (UK)
20290 IBM290 IBM EBCDIC (Japanese katakana)
20297 IBM297 IBM EBCDIC (France)
20420 IBM420 IBM EBCDIC (Arabic)
20423 IBM423 IBM EBCDIC (Greek)
20424 IBM424 IBM EBCDIC (Hebrew)
20833 x-EBCDIC-KoreanExtended IBM EBCDIC (Korean Extended)
20838 IBM-Thai IBM EBCDIC (Thai)
20866 koi8-r Cyrillic (KOI8-R)
20871 IBM871 IBM EBCDIC (Icelandic)
20880 IBM880 IBM EBCDIC (Cyrillic Russian)
20905 IBM905 IBM EBCDIC (Turkish)
20924 IBM00924 IBM Latin-1
20932 EUC-JP Japanese (JIS 0208-1990 and 0212-1990)
20936 x-cp20936 Chinese Simplified (GB2312-80)
20949 x-cp20949 Korean Wansung
21025 cp1025 IBM EBCDIC (Cyrillic Serbian-Bulgarian)
21866 koi8-u Cyrillic (KOI8-U)
28591 iso-8859-1 Western European (ISO)
28592 iso-8859-2 Central European (ISO)
28593 iso-8859-3 Latin 3 (ISO)
28594 iso-8859-4 Baltic (ISO)
28595 iso-8859-5 Cyrillic (ISO)
28596 iso-8859-6 Arabic (ISO)
28597 iso-8859-7 Greek (ISO)
28598 iso-8859-8 Hebrew (ISO-Visual)
28599 iso-8859-9 Turkish (ISO)
28603 iso-8859-13 Estonian (ISO)
28605 iso-8859-15 Latin 9 (ISO)
29001 x-Europa Europa
38598 iso-8859-8-i Hebrew (ISO-Logical)
50220 iso-2022-jp Japanese (JIS)
50221 csISO2022JP Japanese (JIS-Allow 1 byte Kana)
50222 iso-2022-jp Japanese (JIS-Allow 1 byte Kana - SO/SI)
50225 iso-2022-kr Korean (ISO)
50227 x-cp50227 Chinese Simplified (ISO-2022)
51932 euc-jp Japanese (EUC)
51936 EUC-CN Chinese Simplified (EUC)
51949 euc-kr Korean (EUC)
52936 hz-gb-2312 Chinese Simplified (HZ)
54936 GB18030 Chinese Simplified (GB18030)
57002 x-iscii-de ISCII Devanagari
57003 x-iscii-be ISCII Bengali
57004 x-iscii-ta ISCII Tamil
57005 x-iscii-te ISCII Telugu
57006 x-iscii-as ISCII Assamese
57007 x-iscii-or ISCII Oriya
57008 x-iscii-ka ISCII Kannada
57009 x-iscii-ma ISCII Malayalam
57010 x-iscii-gu ISCII Gujarati
57011 x-iscii-pa ISCII Punjabi
65000 utf-7 Unicode (UTF-7)
65001 utf-8 Unicode (UTF-8)

原文地址:https://www.cnblogs.com/kkun/p/2075534.html