自己用的电脑性能不太好所以VS和其他的软件大多装的是低版本的,VS就装的2008。
每次上课完老师都会把项目发下来让我们参考,不过大多代码都是自己敲的,很少会打开老师发的项目,今天代码有点多就打开了试下,结果发现老师用的VS是2010的,自己的是2008的,直接打开还不行,然后查看解决方案文件查看下是不是能改下什么配置,然后发现第二行和第三行分别是
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
很明显这应该是VS打开时根据里面的配置来决定是否能打开,然后试了下把Version 11.00改成Version 10.00,# Visual Studio 2008,保存后确实可以直接打开了,但是又有个坑爹的提示:项目无法读取,接着再看项目文件有什么猫腻,打开一个后缀名是csproj的文件,发现是个XML文件,根节点是类似于<Project ToolsVersion="4.0" DefaultTargets="Build"这样的东西,再手动把4.0改成3.5,再打开解决文案就可以加载项目文件了。
又有个问题是发下来的一个解决方案包含了八个项目,每个都要重新手动的改一遍,这是每一个程序猿都不能忍受的,这次虽然手动改了下次又发新的呢,还要重新手动修改吗。
所以决定还要做个小程序来一起把它们都改了,昨天刚好学了XML的操作,这回刚好能练练手了。
整个流程就是遍历整个文件夹下的项目文件,然后把里面的Project根节点的ToolsVersion属性改成3.5的就行了,sln文件可以直接读取整个文件再找到匹配的字符串然后转换再重新保存就行了。
- // 界面上两个文本框两个按钮,一个复选框,复选框选中则遍历子文件夹
- private void button_Click(object sender, EventArgs e)
- {
- if (!Directory.Exists(textBox1.Text.Trim()))
- {
- return;
- }
- Button bt = sender as Button;
- string xmorsln = "";
- if (bt == button1)
- xmorsln = "*.csproj";
- else xmorsln = "*.sln";
- string[] st;
- if (checkBox1.Checked == true)
- {
- st = Directory.GetFiles(textBox1.Text, xmorsln, SearchOption.AllDirectories);
- }
- else
- {
- st = Directory.GetFiles(textBox1.Text, xmorsln);
- }
- if (st.Length == 0)
- {
- MessageBox.Show("没有文件");
- }
- else
- {
- if (bt == button1)
- ww(st);
- else wsln(st);
- }
- }
- // 转换每个项目文件
- private void ww(string[] st)
- {
- int i = 0;
- foreach (var item in st)
- {
- writenewtext(item);
- textBox2.AppendText("OK->项目:" + item + Environment.NewLine + "-------------------------------------" + Environment.NewLine);
- i++;
- }
- textBox2.AppendText("OK->全部转换完成" + i + "个项目" + Environment.NewLine + "-------------------------------------" + Environment.NewLine);
- }
- private void writenewtext(string xmlfile)
- {
- XDocument xdoc = XDocument.Load(xmlfile);
- XElement root = xdoc.Root;
- root.SetAttributeValue("ToolsVersion", "3.5");
- xdoc.Save(xmlfile);
- }
- private void wsln(string[] sln)
- {
- foreach (var item in sln)
- {
- string bakf = Path.GetFullPath(item) + ".bak";
- File.Copy(item, bakf, true);
- textBox2.AppendText("OK->解决方案:" + item + Environment.NewLine + "备份至" + bakf + Environment.NewLine + "-------------------------------------" + Environment.NewLine);
- byte[] b = File.ReadAllBytes(item);
- b[60] = (byte)48;
- b[84] = (byte)48;
- b[85] = (byte)56;
- File.WriteAllBytes(item, b);
- }
- }
复制代码
一执行就完都转换完了,几秒钟的事... |