
рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЪреАрдВрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рди рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рд╣рдорд╛рд░реА рдЫреЛрдЯреА рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрд░рд╛рджрд╛ рдерд╛, рд╣рдбрд╕рди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдерд╛: рд╕рдВрдХрд▓рди, NUnit рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛% рдХрд╡рд░реЗрдЬ рдЧрд┐рдирдирд╛, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рдвреВрдВрдврдирд╛ рдФрд░ рдХреЛрдб рдореЗрдВ рдореБрдЦреНрдп рд╢реИрд▓реАрдЧрдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╢реБрд░реВрдЖрдд рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдо FxCop рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рди рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдФрд░ рдЗрд╕рд▓рд┐рдП! рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
рдкреГрд╖реНрдарднреВрдорд┐
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдореИрдВрдиреЗ рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рди рдХреЛ рдХрдИ рдШрдЯрдХреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛:
- dbdeploy.build.xml - рдПрдХ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдФрд░ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
- fxcop.build.xml - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА FxCop рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
- main.build.xml - рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рд╕реНрд▓рд╛рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ
- ncover.build.xml - рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рдХрд╡рд░реЗрдЬ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдИ рдЧрдИ рд╣реИ
- simian.build.xml - рдФрд░ рдпрд╣рд╛рдБ рдХреЛрдб рдореЗрдВ рджреЛрд╣рд░рд╛рд╡ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред
- test.build.xml - рдареАрдХ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА NUnit рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрд╛рдЧреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП, рдбрд┐рд╡рд╛рдЗрд╕ fxcop.build.xml рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдпрд╣ рдПрдХ рдиреАрд░рд╕ рдФрд░ рд▓рдВрдмреА рдХрд╕рд░рдд рд╣реИред рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ, рдЪреВрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдФрд░ рдЪреАрдВрдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ FxCop рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХрд░ рджреАред рдЪреВрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЗрдВ рдереАрдВ, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ FxCop рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдирд╛ рдФрд░ рдЪреАрдВрдЯреА-рдХреЙрдиреНрдЯреНрд░рд┐рдм рдФрд░ рдЪреАрдВрдЯреА рдХрдорд╛рдВрдб рдкрд░ рдореИрдиреБрдЕрд▓ рдкрдврд╝рдирд╛, рдореБрдЭреЗ рд╡рд╣реА рдорд┐рд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдпрд╣ рд╕рдмрдВрдЯ рдЯреАрдо рдереА рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдЕрдкрдирд╛ рд▓рдХреНрд╖реНрдп рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдиреАрдЪреЗ!
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- clean-fxcop-result-folder - FxCop рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ рдФрд░ xxopop рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ
- рд░рди-fxcop - рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдЬреЛ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг FxCop'om рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
- рдмрдирд╛рдПрдБ-рддрд░реНрдХ - рдПрдХ рдХрд╛рд░реНрдп рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЙрдк-рдирд┐рд░реНрдорд╛рдг рдпреЛрдЬрдирд╛ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди-рдмрд╛рдп-рд▓рд╛рдЗрди рд▓рд┐рдЦрддрд╛ рд╣реИред
- рд░рд╛рдЗрдЯ-рд╣реЗрдб-рдкрд╛рд░реНрдЯ - рдПрдХ рд╣реЗрдбрд░ рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реА рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рд╕рдм-рдмрд┐рд▓реНрдб рдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ
- рд░рд╛рдЗрдЯ-рдкрд╛рдж рд▓реЗрдЦ-рднрд╛рдЧ - FxCop рдХрдорд╛рдВрдб рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкрде рдХреА рд╕реВрдЪреА рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ
рдЕрдЧрд▓рд╛, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЕрдкрд╛рдЪреЗ рдЪреАрдВрдЯреА рдХрдорд╛рдВрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
basename - рдЖрдкрдХреЛ рдкреВрд░реНрдг рдкрде рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
loadfile - рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрд╛рд░реНрдп .NET рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ proj рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрдВрдЯ - рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ FxCop рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ
Propertyregex - рдЖрдкрдХреЛ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдкрд░ рджрд┐рдП рдЧрдП рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрджрд┐ - рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рддрд░реНрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдм рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдкрд░ рдЕрд▓рдЧ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд┐рдЦрдиреЗ-рд╕рд┐рд░-рднрд╛рдЧ
<target name="write-head-part"> <echo file="${dynafile.path}\${dynafilename}"><?xml version="1.0" encoding="UTF-8"?> <project name="dyna-fxcop-build" default="run-fx-cop-report-creation" basedir="."> <target name="run-fx-cop-report-creation"> <exec executable="${fxcop.path}\FxCopCmd.exe" failonerror="false"></echo> </target>
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рди рдХреЗ рдорд╛рдирдХ рд╣реЗрдбрд░
${dynafile.path}\${dynafilename}
, рдкрде рдкрд░ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ
< >
< >
, рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
< >
ред рдпрд╣ рдПрдлрдПрдХреНрд╕рдХреЛрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
exec
рдХрд╛рд░реНрдп рдХреЛ рднреА рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣,
arg
рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддреЛрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд╕реВрдЪреА рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
create-рддрд░реНрдХреЛрдВ
<target name="create-arguments"> // <echo message="${item.file}"/> // , filename <basename property="filename" file="${item.file}"/> // output.path <OutputPath> csproj <loadfile srcfile="${item.file}" property="output.path"> <filterchain> <linecontains> <contains value="<OutputPath>"/> </linecontains> </filterchain> </loadfile> // <OutputType> csproj output.type <loadfile srcfile="${item.file}" property="output.type"> <filterchain> <linecontains> <contains value="<OutputType>"/> </linecontains> </filterchain> </loadfile> // <AssemblyName> csproj assembly.name <loadfile srcfile="${item.file}" property="assembly.name"> <filterchain> <linecontains> <contains value="<AssemblyName>"/> </linecontains> </filterchain> </loadfile> // OutputPath output.path.info <propertyregex property="output.path.info" input="${output.path}" regexp="<OutputPath>(.*?)</OutputPath>" select="\1" /> // OutputType output.type.info <propertyregex property="output.type.info" input="${output.type}" regexp="<OutputType>(.*?)</OutputType>" select="\1" /> // AssemblyName assembly.name.info <propertyregex property="assembly.name.info" input="${assembly.name}" regexp="<AssemblyName>(.*?)</AssemblyName>" select="\1" /> // <propertyregex property="item.path" input="${item.file}" regexp="(.*)\\" select="\1" /> <echo message="output.type.info = ${output.type.info}"/> <echo message="output.path = ${output.path}"/> // output.type.info <if> <contains string="WinExe" substring="${output.type.info}"/> <then> <property name="file.name.ext" value="${assembly.name.info}.exe"/> </then> <elseif> <contains string="Exe" substring="${output.type.info}"/> <then> <property name="file.name.ext" value="${assembly.name.info}.exe"/> </then> </elseif> <else> <property name="file.name.ext" value="${assembly.name.info}.dll"/> </else> </if> // <arg value=""/> value . <echo file="${dynafile.path}\${dynafilename}" append="true"> <arg value="/f:${item.path}\${output.path.info}${file.name.ext}"/> </echo> </target>
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди csproj рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рд╕реЗ, рдЯреИрдЧ рдбреЗрдЯрд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: OutputPath, OutputType рдФрд░ AssemblyNameред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╛рдЗрд▓реЗрдВ рдереАрдВ рдЬрд┐рдирдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдФрд░ рдмрд┐рд▓реНрдб рдпреЛрдЬрдирд╛ рдХреА рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ,
рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП
arg рд▓рд╛рдЗрдиреЗрдВ
/ f: рдзреНрд╡рдЬ
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВред
рд▓рд┐рдЦрдиреЗ-рдкрд╛рдж-рднрд╛рдЧ
<target name="write-footer-part"> <echo file="${dynafile.path}\${dynafilename}" append="true"> <arg value="/r:${fxcop.path}\Rules"/> <arg value="/o:${fxcop.report.full.path}"/> </exec> </target> </project></echo> </target>
рдпрд╣ рдХрд╛рд░реНрдп рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рди рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, рдЬреЛ FxCop рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рдпрдорд╛рд╡рд▓реА рдлреЛрд▓реНрдбрд░
/r:${fxcop.path}\Rules
рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдлреЛрд▓реНрдбрд░ /
/o:${fxcop.report.full.path}
ред
exec
,
traget
рдФрд░
project
рд╕рдорд╛рдкрди рдЯреИрдЧ рднреА
traget
ред
рд░рди-FxCop
<target name="run-fxcop"> // - <antcall target="write-head-part"/> // <echo file="${dynafile.path}\${dynafilename}" append="true"> </echo> <var name="dll.names" value=""/> // csproj , , item.file, // create-arguments <foreach target="create-arguments" param="item.file" inheritall="true"> <fileset dir="${basedir}" casesensitive="no"> <include name="**/*.csproj"/> // /obj/Debug/ <exclude name="**/obj/Debug/**.*"/> </fileset> </foreach> // - <antcall target="write-footer-part"/> // -. <subant target="run-fx-cop-report-creation"> <fileset dir="${dynafile.path}" includes="${dynafilename}"/> </subant> </target>
рдареАрдХ рд╣реИ, FxCop рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рди рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдм рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рдиред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, .NET рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ,
рд░рд╛рдЗрдЯ-рд╣реЗрдб-рдкрд╛рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣реЗрдбрд░
${dynafile.path}\${dynafilename}
рдкрде рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдВрдд рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдореЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
append="true"
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрдХреЛ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред
рдЗрди рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж, рдлрд╝реЙрд░реНрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
csproj
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдЪрд░ item.file рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ
param="item.file"
рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЪреАрдВрдЯреА obj / Debug рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддреА рд╣реИ,
/>
рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВред
рдлрд┐рд░,
write-footer-part
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдЕрдм рдордЬрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛! рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдмрд┐рд▓реНрдб рдкреНрд▓рд╛рди рдореЗрдВ
run-fx-cop-report-creation
рдирд╛рдордХ рдПрдХ рдЯрд╛рд╕реНрдХ рдмрдирд╛рдпрд╛, рдЕрдм рд╣рдо рдЗрд╕реЗ рд╕рдмрдВрдЯ
рдЯрд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХреЛрдВ рдореЗрдВ, рдирд┐рд░реНрдорд╛рдг рдпреЛрдЬрдирд╛ рдХреА рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ
run-fx-cop-report-creation
рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рджрд┐рд▓рдЪрд╕реНрдк рдереА :) рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдкреВрд░реНрдг xml FxCop рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛрдб рдмрдирд╛рдПрдБ <?xml version="1.0" encoding="UTF-8"?> <project name="fxcop-xxx-project" default="run-fxcop" basedir="."> <property name="dynafile.path" value="${basedir}"/> <property name="dynafilename" value="dynabuild.xml"/> <property name="fxcop.report.dir" value="${basedir}\FxCopReports"/> <property name="fxcop.report.full.path" value="${fxcop.report.dir}\fxcop.report.xml"/> <target name="clean-fxcop-result-folder"> <echo message="Cleaning FxCop result report dir, and dynamic xml"/> <delete> <fileset dir="${fxcop.report.dir}" includes="**/*.*"/> </delete> <delete file="${dynafile.path}\${dynafilename}" failonerror="false"/> </target> <target name="run-fxcop"> <antcall target="write-head-part"/> <echo file="${dynafile.path}\${dynafilename}" append="true"> </echo> <var name="dll.names" value=""/> <foreach target="create-arguments" param="item.file" inheritall="true"> <fileset dir="${basedir}" casesensitive="no"> <include name="**/*.csproj"/> <exclude name="**/obj/Debug/**.*"/> </fileset> </foreach> <antcall target="write-footer-part"/> <subant target="run-fx-cop-report-creation"> <fileset dir="${dynafile.path}" includes="${dynafilename}"/> </subant> </target> <target name="create-arguments"> <echo message="${item.file}"/> <basename property="filename" file="${item.file}"/> <loadfile srcfile="${item.file}" property="output.path"> <filterchain> <linecontains> <contains value="<OutputPath>"/> </linecontains> </filterchain> </loadfile> <loadfile srcfile="${item.file}" property="output.type"> <filterchain> <linecontains> <contains value="<OutputType>"/> </linecontains> </filterchain> </loadfile> <loadfile srcfile="${item.file}" property="assembly.name"> <filterchain> <linecontains> <contains value="<AssemblyName>"/> </linecontains> </filterchain> </loadfile> <propertyregex property="output.path.info" input="${output.path}" regexp="<OutputPath>(.*?)</OutputPath>" select="\1" /> <propertyregex property="output.type.info" input="${output.type}" regexp="<OutputType>(.*?)</OutputType>" select="\1" /> <propertyregex property="assembly.name.info" input="${assembly.name}" regexp="<AssemblyName>(.*?)</AssemblyName>" select="\1" /> <propertyregex property="item.path" input="${item.file}" regexp="(.*)\\" select="\1" /> <echo message="output.type.info = ${output.type.info}"/> <echo message="output.path = ${output.path}"/> <if> <contains string="WinExe" substring="${output.type.info}"/> <then> <property name="file.name.ext" value="${assembly.name.info}.exe"/> </then> <elseif> <contains string="Exe" substring="${output.type.info}"/> <then> <property name="file.name.ext" value="${assembly.name.info}.exe"/> </then> </elseif> <else> <property name="file.name.ext" value="${assembly.name.info}.dll"/> </else> </if> <echo file="${dynafile.path}\${dynafilename}" append="true"> <arg value="/f:${item.path}\${output.path.info}${file.name.ext}"/> </echo> </target> <target name="write-head-part"> <echo file="${dynafile.path}\${dynafilename}"><?xml version="1.0" encoding="UTF-8"?> <project name="dyna-fxcop-build" default="run-fx-cop-report-creation" basedir="."> <target name="run-fx-cop-report-creation"> <exec executable="${fxcop.path}\FxCopCmd.exe" failonerror="false"></echo> </target> <target name="write-footer-part"> <echo file="${dynafile.path}\${dynafilename}" append="true"> <arg value="/r:${fxcop.path}\Rules"/> <arg value="/o:${fxcop.report.full.path}"/> </exec> </target> </project></echo> </target> </project>