新社区网站

通常,你会在正确的地方,但我们最近推出了一个全新的社区网站……为社区,受社区。

耶……带我去社区!

社区博客是社区成员的个人观点,绝不是DNN公司或DNN平台的官方立场。这是一个表达个人对DNNPlatform、社区及其生态系统的想法的地方。你有什么有用的信息想要与DNN社区分享吗?如果有,请联系

社区博客的使用由我们的社区博客指南-请在评论或发布之前阅读。


从解决方案文件中删除项目和TFS绑定

五月 04

在DotNetNuke,我们发布了许多不同的软件包,每个版本包括社区和我们的专业和企业客户的源软件包。在内部,我们有一个覆盖的解决方案文件,它包含了我们每天处理的所有项目,这个解决方案文件还包含了所有的单元测试。当我们发布源包时,我们发布了包含或不包含单元测试的解决方案文件,以及一个VS2008格式的sln文件和一堆针对专业和企业客户的变体,这实际上是15个不同的解决方案文件。一旦包被创建,就会有一个自动的构建,它会编译每个包,以确保我们设置了所有正确的项目和引用。

此外,由于我们将这些解决方案分发给无法访问TFS设置的用户,因此TFS绑定也被删除了。

所有这些不同的sln文件都是从一个解决方案文件创建的,因此所有内部开发人员只需处理一个sln文件。

好了,就这样。问题是如何从解决方案文件中删除各种项目,使其在Visual Studio中打开,也可以从CCNet中构建。简单地删除定义项目的文本是不够的,因为这会使嵌套项目部分混乱不堪。即使Visual Studio可以打开文件,MSBuild也会死得很惨,因此无法进行自动编译。

我在下面写的自定义任务以这样一种方式处理sln文件,即VS和MSBuild都可以解析文件并做他们需要做的事情。

要使用该任务,请将以下内容添加到MSBuild文件中

<GenerateSolutionFiles

OriginalFile=$ (PackagingFolder) \ DotNetNuke_Enterprise_UnitTests.sln
CreatedFile=$ (PackagingFolder) \ DotNetNuke_Community_UnitTests_Source.sln
projectname=@ (AllSolutionsProjects);@ (EEProjects);@ (PEProjects);
@ (EETestProjects);DotNetNuke.Professional.HtmlPro
更换=@ (CEReplacements)
RemoveTfsBindings=真正的/>

你在ProjectNames中指定要删除的项目列表,你也可以在指定要替换的测试和替换文本的地方做简单的文本替换:

<ItemGroup><CEReplacements包括=DotNetNuke_Enterprise/><CEReplacements包括=DotNetNuke_Community/>ItemGroup>

             

我们用它来管理网站名称。

Task的代码如下所示。享受。

使用系统;使用来;使用Microsoft.Build.Utilities;名称空间DotNetNuke.MSBuild.Tasks {使用先;公共GenerateSolutionFiles:任务{公共字符串OriginalFile {得到;;}公共字符串CreatedFile {得到;;}公共字符串[] ProjectNames {得到;;}公共字符串[]替换{得到;;}公共保龄球RemoveTfsBindings {得到;;}公共覆盖保龄球Execute () {如果(projectname = =) {返回真正的;}试一试{vartr =StreamReader (OriginalFile真正的);tr.Peek ();varfileEncoding = tr.CurrentEncoding;varcontent = tr.ReadToEnd();tr.Close ();varglobalIndex = content。IndexOf (“全球”);varglobalSection =内容。Substring (globalIndex内容。长度- globalIndex);varglobalSections = globalSection。分(字符串[] {”GlobalSection(“},
StringSplitOptions.RemoveEmptyEntries);varprojectsSection =内容。Substring (0, globalIndex);projectsSection = projectsSection。删除(0,projectsSection。IndexOf (”项目(“));varprojects = projectsSection。分(字符串[] {”项目(“}, StringSplitOptions.RemoveEmptyEntries);varnestedProjectsSection =字符串空虚;如果(RemoveTfsBindings) {//删除TFS部分。content = globalSections。其中(glb =>)包含(“TeamFoundationVersionControl”)).
Aggregate(content, (current, glb) => current。替换(字符串.Concat (”GlobalSection(“, glb),字符串空虚));Content =内容。替换(“傻科”字符串空虚);}foreachvarglbglobalSections。其中(glb =>)包含(“NestedProjects”{nestedProjectsSection =字符串.Concat (”GlobalSection(“、glb);}varnestedProjects = nestedProjectsSection。分(字符[] {' \ r '' \ n '' \ t '' \ t '},
StringSplitOptions.RemoveEmptyEntries) .ToList ();foreachvarprojectNameprojectname) {foreachvar项目项目){如果(项目。包含(“ProjectSection”))继续;varprojectEntry =项目。替换(“EndProject”字符串空虚).Replace (“\”“字符串空虚)。
替换(”“字符串空虚).Replace (“\ r”字符串空虚).Replace (“\ n”字符串空虚);varindexfirstquals = projectEntry。IndexOf (“=”) + 1;projectEntry = projectEntry。删除(0,indexFirstEquals);varprojectNameGuid = projectEntry。分(”、“);如果(projectNameGuid[0] == projectName) {content = content。替换(字符串.Concat (”项目(“、项目)字符串空虚);varnestedProject = nestedProjects。FirstOrDefault(l => l.s startswith (projectNameGuid[2]));如果(nestedProject ! =默认的字符串{nestedProjects。RemoveAll(l => . startswith (projectNameGuid[2]));} } } }varfilteredNestedProjects =字符串.Concat (字符串. join (“t \ r \ n \ t \”, nestedProjects。
ToArray ()),“t \ r \ n \”).替换(“\ tEndGlobalSection”“EndGlobalSection”);content = content. replace (nestedProjectsSection,filteredNestedProjects);如果(替换! =) {var索引= 0;index <=替换项。长度- 1;Index = Index + 2) {content = content。替换(更换[index], Replacements[index + 1]); } }如果(CreatedFile。包含(“_VS2008”)) {//将副本转换为VS2008Content =内容。替换(# Visual Studio 2010# Visual Studio 2008);Content =内容。替换(Microsoft Visual Studio解决方案文件,格式版本11.00
Microsoft Visual Studio解决方案文件,格式版本10.00);Content =内容。替换(“vbproj”“VS2008.vbproj”).替换(“csproj”“VS2008.csproj”);}varnewSolutionFile =StreamWriter (CreatedFile, fileEncoding);newSolutionFile.WriteLine(内容);newSolutionFile.Close ();}(ex例外){var文件=StreamWriter (“F: \ \ \ \ log.txt构建”);file.WriteLine (ex.StackTrace);file.Close ();返回;}返回真正的;}}

评论

目前没有评论,请第一个发表评论。

评论形式

只有注册用户才能发表评论。

NewsArchives


Aderson Oliveira(22岁)
亚历克·惠廷顿(11岁)
亚历山德拉·戴维斯(3岁)
Alex Shirley(10岁)
安德鲁·霍夫林(3岁)
安德鲁·纳斯(30岁)
安迪·特里巴(1)
安东尼·格伦赖特(5岁)
安东尼奥·夏格里(28岁)
阿什·普拉萨德(37岁)
本·施密特(1)
本杰明·赫尔曼(25岁)
伯努瓦·萨顿(9岁)
贝丝·费尔堡(12岁)
比尔·沃克(36岁)
鲍勃·克鲁格(5岁)
波格丹·莱特斯库(1)
布莱恩·杜克斯(2岁)
白雪皑皑(1)
布鲁斯·查普曼(20岁)
布莱恩·安德鲁斯(1)
卡塔·康诺利(55岁)
查尔斯·纳斯(163)
克里斯·哈蒙德(第213届)
克里斯·帕特拉(55岁)
克林特·帕特森(108)
邝党(21岁)
丹尼尔·巴塞洛缪(2岁)
丹尼尔·梅特勒(181)
丹尼尔·瓦拉达斯(48岁)
戴夫·巴克纳(2岁)
大卫·波因德克斯特(12岁)
大卫·罗德里格斯(3岁)
萧耀文(1)
道格·豪厄尔(11岁)
Erik van Ballegoij(30岁)
恩斯特·彼得·塔明加(80岁)
弗朗西斯科·佩雷斯·安德烈斯(17岁)
杰夫·巴洛(12岁)
乔治·阿拉特拉什(12岁)
吉福德·沃特金斯(3)
吉尔·勒·皮戈彻(3)
伊恩·罗宾逊(7岁)
以色列·马丁内斯(17岁)
简·布洛姆奎斯特(2)
简·乔纳斯(3岁)
贾斯普雷特·巴蒂亚(1)
詹妮·梅里菲尔德(6岁)
乔·布林克曼(274)
约翰·米切尔(1)
乔恩·亨宁(14岁)
乔纳森·希利(4岁)
乔丹·库珀史密斯(1)
约瑟夫·克雷格(2岁)
马侃(1)
凯文贝吉(3岁)
凯利·福特(4岁)
肯·格里尔森(10岁)
凯文·施莱纳(6岁)
利·波因特(31岁)
洛林·杨(60岁)
Malik Khan (1)
马特·拉特利奇(2岁)
马蒂亚斯·施洛曼(16岁)
毛里西奥Márquez (5)
迈克尔·多克西(7岁)
迈克尔·托比什(3岁)
迈克尔·华盛顿(2002)
米格尔·加梅坦(3)
迈克·霍顿(19岁)
米歇尔·塞勒斯(40岁)
弥敦罗孚(3)
Navin V Nagiah(14岁)
n (31)
Nik Kalyani(14岁)
奥利弗·海因(1)
帕特里西奥·f·萨利纳斯(1)
帕特里克·瑞恩(1)
彼得·唐克(54岁)
菲利普·比德尔(135岁)
菲利普·贝克尔(4岁)
理查德·杜马斯(22岁)
罗伯特·J·柯林斯(5岁)
罗杰·塞尔温(8岁)
鲁本·洛佩兹(1)
莱恩·马丁内斯(1岁)
Sacha Trauwaen (1)
爱沙尼亚语(4)
Sanjay Mehrotra(9岁)
斯科特·麦卡洛克(1)
斯科特·施莱西尔(11岁)
斯科特·威尔金森(3岁)
斯科特·威尔海特(97岁)
塞巴斯蒂安·洛波德(80岁)
肖恩·沃克(237)
肖恩·梅哈菲(17岁)
斯蒂芬·卡尔曼(12岁)
Stefan Kamphuis(12岁)
史蒂夫·法比安(31岁)
史蒂文·费舍尔(1)
蒂莫·布鲁梅尔霍夫(24岁)
托尼·亨利克(3岁)
托斯滕·韦根(3岁)
第谷·德·沃德(4)
Vicenç Masanas(27岁)
Vincent Nguyen(3岁)
维塔利·科扎达耶夫(6岁)
威尔·摩根维克(40岁)
威尔·斯特罗尔(180岁)
威廉·塞弗伦斯(5岁)
什么是液体含量?
找出
什么是液体含量?
找出
什么是液体含量?
找出
Baidu
map