集成開發(fā)環(huán)境的配置及使用說明_第1頁
集成開發(fā)環(huán)境的配置及使用說明_第2頁
集成開發(fā)環(huán)境的配置及使用說明_第3頁
集成開發(fā)環(huán)境的配置及使用說明_第4頁
集成開發(fā)環(huán)境的配置及使用說明_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

集成開發(fā)環(huán)境的配置及使用說明本文講解如何編寫MSBuild腳本文件執(zhí)行編譯系統(tǒng)、運(yùn)行FxCop檢查代碼、運(yùn)行NUnit以及NCover進(jìn)行單元測(cè)試、運(yùn)行SandCastle生成幫助文檔四項(xiàng)功能,并如何在集成開發(fā)環(huán)境中使用。一、集成開發(fā)環(huán)境的配置工具軟件準(zhǔn)備MSBuild只要安裝過VS2005或VS2008后,就可以是路徑C:\WINDOWS\Microsoft.NET\Framework中看到MSBuild的三人版本,本例中使用V3.5。另外還得從下面的網(wǎng)站下載一個(gè)MSBuild.Community.Tasks.msi文件,里面有MSBuild的已經(jīng)編寫好的各種任務(wù)。下載地址如下:/NCoverNCover現(xiàn)有網(wǎng)上使用的主要有兩個(gè)版本NCover3.1和NCover1.5.8,但由于后者是免費(fèi)版本,所以本例中使用NCover1.5.8版本,下載地址如下:/download/community其它軟件其它軟件如下所示:NUnit2.5.1FxCop1.36HTMLHelpCompilerSandcastleHelpFileBuilderv以上包括1.1.1和1.1.2的軟件均可在Redmine項(xiàng)目管理的集成開發(fā)環(huán)境的配置的文件管理中下載,此處就不一一給鏈接了。下載后均按默認(rèn)安裝即可。但因?yàn)橐诿钚兄惺褂肕SBuild和FxCopcmd命令,所在在環(huán)境變量Path中加入:C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\ProgramFiles\MicrosoftFxCop1.36;另外再增加兩個(gè)新變量:DXROOTC:\ProgramFiles\Sandcastle和HHCEXEC:\ProgramFiles\HTMLHelpWorkshop1.2編寫MSBuild腳本文件關(guān)于MSBuild的常用腳本元素之前已在《MSBuild的簡(jiǎn)單介紹與使用》中說過,這里就不再重復(fù)了,只針對(duì)每一功能的重要語句進(jìn)行講解,詳情可以Redmine項(xiàng)目管理的集成開發(fā)環(huán)境的配置中下載MyPj文件進(jìn)行查看。1.2.1編譯系統(tǒng)腳本文件如下所示:<!--Buildtheassemblies--><MSBuildProjects="@(TestProjects)"Targets="$(BuildTargets)"Properties="RunCodeAnalysis=$(RunCodeAnalysis)"><OutputTaskParameter="TargetOutputs"ItemName="CodeAssemblies"/></MSBuild>其中參數(shù)如下:Projects:必選的ITaskItem[]參數(shù)。指定要生成的項(xiàng)目文件。Properties:可選的String參數(shù)。以分號(hào)分隔的屬性名稱/值對(duì)列表,這些屬性名稱/值對(duì)將作為全局屬性應(yīng)用于子項(xiàng)目。當(dāng)使用MSBuild.exe生成項(xiàng)目時(shí),指定此參數(shù)在功能上等效于設(shè)置具有/property開關(guān)的屬性。例如:Properties="Configuration=Debug;Optimize=$(Optimize)"通過Properties參數(shù)向項(xiàng)目傳遞屬性時(shí),即使已加載項(xiàng)目文件,MSBuild也會(huì)創(chuàng)建該項(xiàng)目的一個(gè)新實(shí)例。創(chuàng)建項(xiàng)目的新實(shí)例后,MSBuild會(huì)將其視為具有不同的全局屬性并且可與該項(xiàng)目的其他實(shí)例并行生成的不同項(xiàng)目。例如,“發(fā)布”配置可與“調(diào)試”配置同時(shí)生成。Targets:可選的String參數(shù)。指定要在項(xiàng)目文件中生成的一個(gè)或多個(gè)目標(biāo)。使用分號(hào)分隔目標(biāo)名稱列表。如果MSBuild任務(wù)中未指定目標(biāo),將會(huì)生成項(xiàng)目文件中指定的默認(rèn)目標(biāo)。Output元素的參數(shù)含義如下:TaskParameter必需。任務(wù)輸出參數(shù)的名稱。PropertyName:PropertyName或ItemName屬性是必需的。接收任務(wù)輸出參數(shù)值的屬性。此后,項(xiàng)目可以使用$(PropertyName)語法引用該屬性。此屬性名稱可以是新的屬性名稱,也可以是已經(jīng)在項(xiàng)目中定義的名稱。如果ItemName還在使用,則不能使用此屬性。ItemName:PropertyName或ItemName屬性是必需的。接收任務(wù)輸出參數(shù)值的項(xiàng)。此后,項(xiàng)目可以使用@(ItemName)語法引用該項(xiàng)。該項(xiàng)的名稱可以是新的項(xiàng)名稱,也可以是已經(jīng)在項(xiàng)目中定義的名稱。如果PropertyName還在使用,則不能使用此屬性。1.2.2運(yùn)行FxCop檢查代碼在MSBuild.Community.Tasks中本來有編譯好的FxCop任務(wù),但此處由于FxCop版本問題,不能使用,故仍使用MSBuild的Exec任務(wù)來集成FxCop檢查代碼。腳本如下:〈!一使用FxCopCmd命令對(duì)項(xiàng)目進(jìn)行編碼管理一〉<ExecCommand="FxCopCmd/project:@(FxCopFile)/out:$(DocFolder)\$(FxCopResults)"/>/project:@(FxCopFile) p文件(FxCop文件的生成在后邊的集成環(huán)境的使用項(xiàng)目準(zhǔn)備中會(huì)詳細(xì)講解)/out:$(DocFolder)\$(FxCopResults)指定將要生成的FxCop結(jié)果文件1.2.3運(yùn)行NUnit進(jìn)行單元測(cè)試MSBuild.Community.Tasks中包含已編寫好的NUnit任務(wù),此處只要直接添加任務(wù)并配置參數(shù)即可,其中詳細(xì)參數(shù)可以參看MSBuild.Community.Tasks自帶的幫助文檔,腳本文件如下所示:<NUnitAssemblies="@(CodeAssemblies)"ToolPath="$(NUnitPath)"WorkingDirectory="%(CodeAssemblies.RootDir)%(CodeAssemblies.Directory)"OutputXmlFile="@(TestProjects->'%(RootDir)%(Directory)bin\$(Configuration)\$(NUnitFile)')"ContinueOnError="true"><OutputTaskParameter="ExitCode"ItemName="NUnitExitCodes"/></NUnit>Assemblies 任務(wù)編譯生成的結(jié)果(即項(xiàng)目的應(yīng)用程序集)ToolPath:NUnit的安裝路徑WorkingDirectory:MSBuild任務(wù)編譯生成的結(jié)果(即項(xiàng)目的應(yīng)用程序集)所在的目錄OutputXmlFile:指定輸入的xml結(jié)果文件ContinueOnError指如果出錯(cuò)后是否繼續(xù)執(zhí)行124運(yùn)行NCover檢查NUnit覆蓋率因?yàn)镹Cover1.5.8版本不支持MSBuild.Community.Tasks中已編寫好的NCover任務(wù),所以只能用Exec任務(wù)來完成。NCove腳本文件如下:<!―使用exec任務(wù)加載ncover功能,注此處將ncover與nunit集成使用,以避免彈出項(xiàng)目應(yīng)用程序一><ExecCommand="NCover.Console%22$(NUnitCmd)%22/noshadow%22@(CodeAssemblies)%22//l$(CodeCoverFolder)\$(NCoverLogFile)//x$(CodeCoverFolder)\$(NCoverFile)"/>因?yàn)閱为?dú)使用NCover.Console命令執(zhí)行會(huì)彈出項(xiàng)目應(yīng)用程序集的對(duì)話框(如果有的話),所以此處與NUnit一塊使用來避免(如果不阻止的話,后邊在將編寫好的MSBuild集成到ccnet時(shí)會(huì)發(fā)生超時(shí)退出,因?yàn)闊o法關(guān)閉項(xiàng)目應(yīng)用程序集的對(duì)話框)。%22$(NUnitCmd)%22:導(dǎo)入NUnit-console.exe命令The/noshadowoptiondisablesshadowcopyingoftheassemblyinordertoprovideimprovedperformance.%22@(CodeAssemblies)%22:導(dǎo)入MSBuild任務(wù)編譯生成的結(jié)果(即項(xiàng)目的應(yīng)用程序集)//l$(CodeCoverFolder)\$(NCoverLogFile):指定生成的coverage-log文件//x$(CodeCoverFolder)\$(NCoverFile):指定生成的結(jié)果文件COVeragel.Xml運(yùn)行SandCastle生成幫助文檔因?yàn)闆]有編寫好的SandCastle任務(wù),所以此處仍然用Exec任務(wù)來集成,腳本文件如下:<!--Buildsourcecodedocs--><Exec Command="$(DOUBLE_QUOTES)$(MSBuildCmd)$(DOUBLE_QUOTES)$(DOUBLE_QUOTES)@(SandCastleHFBProject)$(DOUBLE_QUOTES)"/>$(DOUBLE_QUOTES)$(MSBuildCmd)$(DOUBLE_QUOTES):導(dǎo)入MSBuildCmd命令$(DOUBLE_QUOTES)@(SandCastleHFBProject)$(DOUBLE_QUOTES):導(dǎo)入已生成好的.shfbproj文件(使用SandcastleHelpFileBuilder生成,后邊詳細(xì)講解如何生成)。清除垃圾文件在任務(wù)結(jié)果時(shí)應(yīng)該將中間生成的無用文件進(jìn)行刪除,如下所示:<!--Createitemcollectionofcustomartifactsproducedbythebuild--><CreateItemInclude="@(TestProjects->'%(RootDir)%(Directory)bin\$(Configuration)\*$(NUnitFile)');@(TestProjects->'%(RootDir)%(Directory)bin\$(Configuration)\*$(LastTestRunSucceededFile)');@(TestProjects->'%(RootDir)%(Directory)bin\$(Configuration)\*.bkp')"><OutputTaskParameter="Include"ItemName="SolutionOutput"/></CreateItem><!--Deleteallthesolutioncreatedartifacts--><DeleteFiles="@(SolutionOutput)"/>先將無用的文件用CreatItem集合成一個(gè)Item,然后用Delete進(jìn)行刪除即可。二、集成開發(fā)環(huán)境的使用本集成環(huán)境的文件結(jié)構(gòu)目錄如下所示:地址?I已E地址?I已E:\ccnet\456文件夾HQccnet?£33fl□ 456田冠》codei王;.詮Documen.ta£iwi.0亡)其它文件0lH)6T8'E,巴loj.codec-msbuild.cmdWindQWE町命令腳本1KB3server_msbui1d.cmdWindow?町命哮■腳本口其它文件其中e:ccnet為ccnet的工作目錄,456為其中的一個(gè)工程目錄,code里存放所有的代碼,此目錄與SVN服務(wù)器保存的代碼進(jìn)行同步,Documentation目錄下存放生成好的各項(xiàng)結(jié)果文件。2.1新建項(xiàng)目(項(xiàng)目準(zhǔn)備)打開VS2008新建一個(gè)項(xiàng)目(此處項(xiàng)目命名為msbtest),添加一個(gè)新測(cè)試類class1,代碼如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingNUnit.Framework;namespaceMSBuildTest{[TestFixture]classClass1{privateinta;privateintb;[SetUp]publicvoidInitializeOperands(){a=1;b=2;}[Test]publicvoidAddTwoNumbers(){intsum=a+b;Assert.AreEqual(sum,3);}[Test]publicvoidMultiplyTwoNumbers(){intproduct=a*b;本文內(nèi)容主要來源于互聯(lián)網(wǎng),文中已盡量引用出處,但仍有疏忽遺漏之處,請(qǐng)?jiān)瓌?chuàng)作者見諒。Assert.AreEqual(2,product);}}}Class1主要為測(cè)試NUnit和NCover用,可以根據(jù)實(shí)際需要添加。另需在References中添加nunit.framework。在c#項(xiàng)目中鼠標(biāo)右鍵點(diǎn)擊所選的項(xiàng)目,在顯示的菜單中選擇Properties選項(xiàng),打開PropertiesPage,鼠標(biāo)左鍵點(diǎn)擊Build項(xiàng),在顯示的頁面中勾選XMLdocumentationfile。如下圖所示:FlaOutputpath_!AllowunsafecodeBuild|RegietelforCOMinterof召XMLdocmentationfile:RescnircesWarninglevelServicesSecurityOutputbirADebug\msbtest.XMLGenerateserialitionassembly:AppliwtionBuildEventsDebugSettingsTreatwat'ningsaserrorsReferenceF包thsSigningAllPublishbin\Detnig\FlaOutputpath_!AllowunsafecodeBuild|RegietelforCOMinterof召XMLdocmentationfile:RescnircesWarninglevelServicesSecurityOutputbirADebug\msbtest.XMLGenerateserialitionassembly:AppliwtionBuildEventsDebugSettingsTreatwat'ningsaserrorsReferenceF包thsSigningAllPublishbin\Detnig\Browse...Configuration.:JOjitimiz^ecodeErrorsandwai'ningsG)HoneOSpecificw^'nings:Active(AnyCPU)Acti辛電ijebug)AutoAdvanced...一般新建項(xiàng)目后,均會(huì)在vs2008的默認(rèn)路徑中的Projects中保存一個(gè)解決方案文件和一個(gè)同名代碼目錄,如下圖所示:點(diǎn)選解決方案,然后在file->savemsbtest.slnas…將項(xiàng)目解決方案文件另存在同名代碼目錄中,這樣做一方面在之后與SVN同步時(shí)不容易出錯(cuò),另一方面便于在msbuild腳本文件中對(duì)文件目錄進(jìn)行控制。最后再編譯運(yùn)行一次即可。然后將所本環(huán)境所提供的test文件夾放至E:\ccnet目錄下,將test目錄重新命名為msbtest,然后把上面所說的同名代碼目錄文件夾中的所有文件復(fù)制到E:\ccnet\msbtest的code目錄下。如下圖所示:后A搜索文件夾后A搜索文件夾文件迥編輯⑥查看邊收藏迦工冥①幫助⑩地址 I寸E:\ccnet\msbtest\code田田i+i一田日蘭件 x國(guó)Obaby日心ccnet3.1456678logmsbteEt田田i+i一田日蘭件 x國(guó)Obaby日心ccnet3.1456678logmsbteEt□l一/code?因bin田詞obj員Properti苗田—Il口匚ijiiientationio苴它文件13Otest田亡I復(fù)件msbtest0OHSOCacheDocumentsVisu:ilI二#Som-ce.1KBmzbtEzt.sin.cacheCACHE文件16KEmmbteEt.csprojViEU:dlC#Fruiec6KBVisu:ilC#5nm-ce.c#_lohjForml.csVisu:±lC#Sijiifize..1KBmsbteEt.csproj.userVisualStudioFr..1KEgmEbtest.sin.FxCopMicrosijftFkCop'5KBForml.I<esigjier.csCy__Visu:ilC#Source...z=2KBmsbteEt.sinMicrosoftVieu:=l1...舅Version:Vieu:=l1..msbtw£t.euo二ViEu:ilStudioSo...電13KB2.1.1生成.FxCop文件若第一次使用FxCop,請(qǐng)先在vs2008中ExternalTools添加FxCop,方法女口下:InVisualStudioselectTools-〉ExternalTools??YoushouldseetheExternalToolsdialogbox.Youmustfillfollowingfields:Title: FxCopCommand: C:\ProgramFiles\MicrosoftFxCop1.36\FxCopCmd.exeArguments: /c/p:"$(SolutionDir)\$(SolutionFileName).fxcop" /cXsl:"C:\ProgramFiles\MicrosoftFxCop1.36\Xml\VSConsoleOutput.xsl"InitialDirectory: C:\ProgramFiles\MicrosoftFxCop1.36Useoutputwindow MustbecheckedIfyouinstallFxCopindifferentlocationthanC:\ProgramFiles\MicrosoftFxCop1.36,youneedtouseyourownpath.

這個(gè)就是我們?cè)黾右院蟮膬?nèi)容:TargetsRules|Incaseyouwanttogroktheswitchesweuse,youcanreadmoreaboutFxCopCmdoptions這個(gè)就是我們?cè)黾右院蟮膬?nèi)容:TargetsRules|Incaseyouwanttogroktheswitchesweuse,youcanreadmoreaboutFxCopCmdoptions.然后打開FxCopGUI界面,在MyFxCopProject中通過”AddTargets”添加E:\ccnet\msbtest\code\bin\Debug下的要分析應(yīng)用程序集,如下圖所示:曰回圉WyFxCupFrojectDJiriit..£r:=uriework.>111e-H-omsbexe設(shè)置Targets以后,可以選定需要的規(guī)則,我們一般不需要Globalization和Security的規(guī)則,所以可以從規(guī)則庫中將兩者去除。

TargetsRulesTargetsRulesMyFxCopProject+PlDesignRules+|~|.:?GlobalizationRulesInteroperabilityRules+Pl.::MobilityRulesNamingRulesS-0C8PerformanceRules軒回滋PortabilityRules+|~|.::SecurityRuless-0^UsageRules然后將項(xiàng)目文件保存至解決方案文件所在的目錄下,并且保存名稱為解決方案全稱加“.FxCop”本例中為msbtest.sln.FxCop,如下圖所示:這樣即可在vs2008中通過Tools->FxCop直接檢測(cè),也可以在后續(xù)集成至MSBuild中時(shí)使用msbtest.sln.FxCop文件。生成.shfbpro文件打開SandcastleHelpFileBuilder,新建一個(gè)工程,名稱隨便,本例仍為msbtest。在DocumentationSources中添加E:\ccnet\msbtest\code\msbtest.sln文件,在Referencesk中把項(xiàng)目中所引用到的dll文件(nunit.framework)加載進(jìn)去,之后在左側(cè)ProjectProperties按下列進(jìn)行配置:設(shè)置FrameworkVersion為3.5設(shè)置HtmlHelp1xCompilerPath為HTMLHelpWorkshop的安裝路徑設(shè)置SandcastlePath為Sandcastle的安裝路徑保存該項(xiàng)目后點(diǎn)擊Namespaces按鈕,選中想要生成幫助文檔的Namespace然后將項(xiàng)目保存至E:\ccnet\msbtest\Documentation\Help路徑下,文件名為msbtest.shfbproj(其實(shí)此處文件名可以隨意,因?yàn)樵贛SBuild中集成時(shí)是自動(dòng)匹配此路徑下的.shfbproj文件)。使用集成環(huán)境執(zhí)行檢測(cè)編輯E:\ccnet\msbtest\c-msbuild.cmd,將原文件修改為:MSBuildE:\ccnet\msbtest\MyPjpause最后雙擊c-msbuild.cmd即可執(zhí)行,執(zhí)行結(jié)果如下所示編譯結(jié)果:i^uildstar2B09—9-123:22:&7Project"E:\ccnetSnsbtesj.pvoj!'onnodeQ<defaulttargeProject"E:\ccnet\risbtest\MyPp&j,proj"<1>isbuilding"E:\ccnetMishtestMCod已Xrt?ibtest.sin"<2>vnnodeQ(BuildtargetCs>>.Buildingsolutionconfiguration"Debug!AnyCPU".Project \ccnetSnsbtest\CodeSjisbtest..sln"<2>isbuildingUE:\ccnetSnsbtest\CodeMisbtest.csproj"<3>onnodeQ<defaulttargets>MHoresourcesareoutofdateuithrespecttotheirsourcefiles.SkippingresourcegenEFRtion.CoreCGsnpile:Skippingtarget',CoreCoFipileMbecausealloutputfilesareup-to-datew土threspecttotheinputfiles.GopyFilesTsOutputDirectnry:msbtest->Ei\ccnetXmsbtest\Code\bin\DebugXmsbtestFexeDrmeBuildingProjectUE:\ccnet\nshtest\Code\nsbtest.csproj"<defaulttargets>.Dr.meBuildingProject"E=\ccn亡tSnght亡st\CodeMiEht亡召t-:sln"<BuildtargeFxcop^uildCudeiMicrosoft<R>FxG^pCommand-LineTao1,Uersl^n1.36<9 .36729.!>Copyright<C>2H07MicrosoftCorporation.fillrightsreserued..LoadingE:\ccnetXnwbtegtSudeXnshtegt.sin.FxCop...LeadedDesignRules;dll...LeadedGlobalizatirrnRules.dll...LeadedInteroperabilityRules;dll...LoadedMobiliti/Rules.dll...LoadedNaningRulesPdll...LoadedPerformanceRules.dll...LeadedPortabilityRules.dll...LeadedSecuriti/Rules.dll...LoadedUsageRules?dll...InitializingIntrospectionengineP.Anali/sing...AnalysisCynpleteWriting599messages...WritingreporttoE:\ccnet\nsbfcest\Documentati^nVFxCopResults.xml.Done.FxCopResults:E:\ccnetXnsbtest^Docunentation'KFxGopResuits.xmlNunitTest:RunningTestsfor:msbtestDeletingfile,PE:\ccnet\msbtest\Code\bin^DebugSmsbtest.exe.LastTestRunSucceeded".ProcessModeliDefaultDomainUsage-SingleExecutionRuntime-net-2.0.50727,1433■■Testsruni2,Errorsi0,Failuresi0,Inconclusive-0,Time-0.03125secondsNotruni0,Invalid:0,Ignored:0,Skipped:0NUni.tResults:Es\ccnet\nsbtest\Code\bin\Debug\nsbtest.exe.TestResuit.xmlNcoverCodeCouerage'RunningCodeCoueragefor:msbtestNCouer.Consoleu1.5.8-CodeCouerageAnali/s:.sfor.NET-Copyright<c>2S04-2&506PeterUaldschmidtCommand:C:XProgramFilesM'IUnit2-5.l\binMiet-2.0^nunit-console.exeCommandArgs-"Znoshadow^ME:\ccnet^nsbtest\Code\bin\Debug\msbtest.exe'(UorkingDirectory:Assenblies:CouerageXml:E.-\ccnet\msbtest\Documentation\CodeCouep\Couepage.xmlCouerageLog:E.-\ccnet\msbtest\Documentation\CodeCouep\Couepage.logUnitingforprofiledapplicationtoconnect...ConnectedConfiguringProfiler...jcjcjcjcjcjcjcjcjcjcjcjcjcjcjcjcjcEndPpogpanOutput黃坯黃坯黃坯黃坯黃坯黃坯黃坯黃坯黃CopyingfilefromMC:XProgranFilesSHCoue

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論