解惑

解己之惑,解人之惑

作者:cherami (第15页共82页)

导入的Reference不能编译

在工程中导入一个Web Service,发现竟然有编译错误,其他的工程没有问题,后来发现是因为工程的Namespace和工程的Service同名,也就是说,工程可能叫MyService,而创建的那个Web Service也叫MyService,所以创建出来的默认的namespace也是MyService,而VS创建的Web Service的stub会引用原来的namespace,所以就会导致引用MyService这个名字,但是编译器不知道你要找这个namespace还是类。因为处于同一个namespace里面的时候可以只用短类名就行了,但是生成的stub是使用全限定名的。

因为这个鄙视一下微软,因为这个是它推荐的命名规范导致的,而Java,package的名字推荐全部使用小写,而类名单词首字母大写,这样就不会出现类似的问题了。

EveryOne不是真正的EveryOne

还是持续集成的问题。Nant中使用copy拷贝文件到远程的机器,远程机器创建了目录并配置成EveryOne是FullControl的,结果是不能删除也不能创建文件,如果运行Service的帐号是默认的那个用户(SYSTEM\NetWorkService),但是如果修改安全策略,让EveryOne可以FullControl服务的话到是没有问题的。
所以说,都是微软的功能,都是EveryOne,都是FullControl,但是对不同的用户,这个EveryOne还是有区别的,似乎文件访问的控制更加严格一些。
另外,环境是虚拟子网里面的东西,我从我自己的机器上(完全不在一个子网和域里面)访问那些共享目录倒是可以删除和创建东西,好奇怪啊。

搜房疯了,Chrome有毛病

老婆说这段时间电脑有问题,上网经常打不开。
她主要上两个网站:搜房和上海热线
我回来试了下,用三种浏览器试的,Chrome4,IE8和FireFox3.0,访问上海热线,Chrome和IE占用CPU资源很高,几乎100%,FireFox表现良好,加载完以后CPU的占用就降下来了。
而搜房上海站,很抱歉,无论哪个浏览器都是CPU占用100%,而且至少得花两分钟以上才能加载完,加载完以后CPU占用还在95%以上。而Chrome浏览器的表现更加的怪异,显示三个Chrome进程,两个占用率都比较高。Chrome另外一个怪异的地方是即使打开Google.cn都会一直占用资源达到30%,而访问我这个Blog则正常,加载完以后资源占用为0。用IE访问都是正常的,加载google.cn以后占用率就为0了。

最终的结论:
搜房疯了
Chrome有毛病

有兴趣的朋友可以自己试验下。

远程控制Service

刚刚还说要写powershell去远程控制service,结果google了下就发现有现成的命令SC:

sc \\targetServer start IISAdmin

唯一的问题就是权限了,运行sc的用户需要有远程机器的高级权限,最好是Administrator,所以最好用域的Administrator

更新:
关于权限的,前面说了用Administrator,但是有些东西不受你自己控制,例如我们,用的Teamcity,虽然我修改了TeamCity和Agent的用户身份,但是很抱歉,不好使。最后只能按照微软的KB修改安全策略,使用的是Security Templates,把IIS相关的三个服务(IISAdmin, HTTPFilter, W3SVC)的Full Control权限分配给了EveryOne。

再更新:
按照微软的KB修改安全策略修改时需要很小心,在打开Database的时候,如果是新的,会提示你选择Security Template,如果你选择的Template不对,那么修改后应用的时候可能会覆盖其他的安全策略,目前我也没有发现正确的应该是什么。所以,请慎用!

最后更新:
知道应该怎么修改当前的安全策略了,把C:\WINDOWS\security\Database\secedit.sdb复制一份,然后打开Database的打开复制的那个,原始的那个不能直接打开。再次鄙视一下微软,这个KB写得实在不怎么样,连提醒都不提醒,另外,Configure Computer Now的时候,应该可以只应用修改的某些项,没有修改的就不要动。

思路不能太僵化

原来的一个项目是Java的,构建的自动发布是采用的FTP+SSH,用FTP把文件上传到目标服务器,然后SSH登录过去重启Service使得新的Deploy生效
现在换到.Net下了,思路没有变,因为有原来的成功经验在啊。
先搜索了下,发现NAnt虽然不支持FTP,但是有第三方的东西支持,下载了,但是发现不好使。
去上了趟厕所,突然想到,我的目的是把文件拷贝到目标目录,为什么不用文件共享呢,这个最简单了,Windows直接支持,不需要任何额外的东西。
至于SSH,估计NAnt也是不支持的,但是powershell是支持远程控制其他的计算机的,重启个服务应该还是很简单的,还没有试,明天再弄了。

.NET平台下的持续集成

比Java平台下的麻烦太多。光是一个Unit Test就折腾了很长时间,很多都推荐NUnit,但是用Visual Studio还得让大家都安装NUnit,也为了看看完全用微软的方案是否可行。
由于我们现在的持续集成的工具选的是TeamCity,所以主的build脚本只能基于NAnt,因为TeamCity虽然支持MSBuild或者VS,但是没有对应的Runner或者兼容的Agent,所以基本上等于不支持。
从NAnt里面调用VisualStudio的工程文件编译是没有问题,因为有nantcontrib,但是运行Unit Test就成问题了,google了很长时间也没有找到好的解决方案,有人自己写了dll去掉整个solution的unit test(微软的msunit),还有个Gallio项目,都不怎么好用,最后回到起点:使用命令行的方式,但是需要在TeamCity的机器上安装Visual Studio,还好我们是大企业版,随便装。
最后出来的build.xml:

<?xml version="1.0"?>
<project name="POC" default="build" basedir=".">
    <property name="nantcontribdll" value="c:/nantcontrib-0.85/bin/NAnt.Contrib.Tasks.dll"/>
    <property name="mstestcommand" value="C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe"/>
    <property name="unittestdir" value="unittest"/>
    <property name="outputtype" value="debug"/>
   
    <target name="build" description="compiles the source code">
        <loadtasks assembly="${nantcontribdll}" />

        <msbuild project="MyProject\MyProject.csproj">
                <property name="teamcity_dotnet_use_msbuild_v35" value="true"/>
        </msbuild>
        <msbuild project="MyProjectTest\MyProjectTest.csproj">
                <property name="teamcity_dotnet_use_msbuild_v35" value="true"/>
        </msbuild>
    </target>
   
    <target name="unittest" description="Run unit test" depends="build">
        <delete dir="${unittestdir}" />
        <mkdir dir="${unittestdir}" />
       
        <exec program ="${mstestcommand}" commandline="/testcontainer:MyProjectTest\bin\${outputtype}\MyProjectTest.dll /resultsfile:${unittestdir}\MyProjectTest.trx" basedir="MyProjectTest"/>
    </target>
   
    <target name="clean" description="Clean output">
        <loadtasks assembly="${nantcontribdll}" />
        <delete dir="${unittestdir}" />
        <msbuild project="MyProject\MyProject.csproj" target="clean">
                <property name="teamcity_dotnet_use_msbuild_v35" value="true"/>
        </msbuild>
        <msbuild project="MyProjectTest\MyProjectTest.csproj" target="clean">
                <property name="teamcity_dotnet_use_msbuild_v35" value="true"/>
        </msbuild>
    </target>
</project>

对于NAnt需要特别说明的是:在TeamCity里面可以用NAnt0.85版本,但是本地调用的话必须用NAnt0.86beta1(当前最新版本),只有这个版本支持.net3.5,而TeamCity使用自己的方式支持.net3.5,就是我们看到的丑陋的teamcity_dotnet_use_msbuild_v35,不能定义一个全局的property了事,必须在每个msbuild任务里面定义这个property。

讨厌的data execution prevention

这个是微软的一个安全补丁,但是搞得服务器非常的不稳定,经常会把Generic Host进程搞死,然后机器就不能联网访问了。
以前采取的是放任的方式处理的,把Computer Browser服务设置成死掉后自动重启能够一定程度上解决问题,但是有时候还是需要人工干预。
正规的做法是安装补丁KB958644,注意版本

Drupal不是那么好玩的

今天下午又试了下自定义Drupal,发现不是那么简单的。
下载了不少的module,CCK, view,以及Tagadelic和对应的view。
不过还是理解了一些东西了,基本的使用有些了解了,还需要进一步的自定义了。
PS:下载的主题ZEN感觉不太好啊,太简单了,特别默认是那个什么StarterKIT,没有什么布局嘛。

PSP大航海时代4技巧

前段时间说玩完大航海了,但是实际上并没有真正的结束,因为我想把211个宝物收集起,找了网上的很多攻略,似乎没有人针对这个版本把全部的宝物列出来,但是有一些非常好的资料列出了绝大部分。
这篇不说宝物,就简单的说一下我玩的心得:

  1. 开始其实很简单,买中型的最便宜的船,把物资仓和空白的仓全部改造成货仓,这样可以最快的积累初始资金。刚开始比较枯燥,就是来回倒卖货物,买船,投资。
  2. 等攒到五个船,都是5个仓位以后,耐力还比较好,就可以把船改造下,多弄物质仓,然后到各大洲的大港口把伙伴收集齐了,尽量避免和其他势力发生冲突,先忍一下,把伙伴收集全。
  3. 根据攻略上的补给村的坐标和约定的言语把全部地图探开,目的是收集那些黄金航线,仓位的话,建议留总共10个货物仓位,其他的全部弄成物质仓位,水手减到最少,推荐减到最小要求以下,例如一共就带50个水手,然后每个船带10个水手。这样一圈下来,通过买卖那些稀有货物,能赚一些小钱100w+,然后回到一个大城市,到同业工会报告黄金航线,以后你就不用担心钱的问题了,因为黄金航线每个月的收入至少是20w,有的月份是40w,然后把船全部换成战列舰,炮也换成连射炮(到汉堡,把武装和经济发展度都升到8000+就行了)
  4. 然后就可以一个大洲一个大洲的消灭所有的对手了,打的时候从弱到强打,注意远距离打就行了,自己的船和水手的损失较少到最小,把对方的船打得剩旗舰以后就可以冲过去火拼争取捕获了,因为这样可以拿到对手总资金的10%,如果对方有1000w,你就可以拿到100w
  5. 剩下的事情就是探宝和收集霸者之证。
  6. 宝物的坐标,收集到赠送品后和送给对应的酒吧女(只有大港口有),然后就可以打开遗迹,起码是可以拿到那些听过的宝物的具体坐标了。注意,有些小港口要请大家喝酒也可以触发很多宝物的信息,然后再去请酒吧女喝酒。
  7. 古地图,每进出港口12次可以拿到四分之一的地图,同一个港口进出也没有问题。注意宝物可能有东西看守,所以开始的时候就不要打古地图的注意了,灭掉全部的对手以后再弄也不是很迟,当然,那就变成为了收集宝物在玩了。

Windows+Apache+PHP5+MYSQL5

打算玩玩Drupal,就搭了个环境,不是很难,但是还是遇到不少问题。
先安装Apache,直接下载Installer安装就行了,没有啥特殊的。
安装MYSQL5,也没有啥特殊的,不过有一点,在Windows下,貌似和Linux下不同,我记得原来linux下mysql的admin用户的用户名是sa,但是在windows下变成root了?还是我记性出错?版本更新?
最后讲PHP,因为问题都是它惹的。
第一,不要下载PHP5.3,因为貌似里面不带php5apache2.dll
第二,下载php5.2的zip包,建议不要下installer,因为网上的文章基本上都是基于zip的
第三,解压到例如c:\php目录下
第四,复制php.ini-dist或者php.ini-recommended为php.ini,修改下php.ini文件,把;extension=php_mysql.dll和;extension=php_mysqli.dll这两行前面的分号去掉
第五,修改httpd.conf,添加如下内容:
LoadModule php5_module "C:/PHP/php5apache2_2.dll"
PHPIniDir "C:/PHP"
AddType application/x-httpd-php .php
AddType application/x-httpd-php .html

注意上面的php5apache2_2.dll,如果你安装的apache是2.0系列的,就是php5apache2.dll
第六,把c:\php和c:\php\ext加入系统的PATH环境变量里面
第七,重启计算机

好了,这个PHP的环境才算搭建好了。
把drupal解压到apache的htdocs下,访问那个install.php就可以了(记得先在mysql下面建个数据库,不需要建任何表)。

更早的文章 更新的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑