楼上的方法都不行,你们没考虑一个问题,就是开发人员在开发的使用时需要整个项目的代码或者库来运行的。代码通过 SVN 是可以设置权限的,如果限制某些人不能 checkout 部分代码文件,那么它要调试的话就必须有已经编译好的库,而 .Net 库又是用中间语言表示的,因此极易被反编译;如果做了混淆,虽然被反编译的难度加大了,但是同时开发成本也上升了,因为都是待开发的项目,你无法保证每个类库都是测试完备,同时你的开发人员水平有限,也编写不出高质量的代码,这样很多时候你需要从现有代码一直跟进到库的源代码才能发现问题,虽然可以用 PDB 来代替源码,但是我相信你的开发人员并没有这个能力使用 PDB 来调试程序。
B/S项目就更困难了,没有服务端和客户端的区别,甚至都不能简单的定义为服务和客户两个权限集来控制权限;特别是JS,它得嵌入页面,而调试牵扯面又太广。
那么这里只有两种可能,进程间通讯的项目,按照不同的进程划分权限;进程内通讯的项目,使用C++封装模块。
谢谢了~~程间通讯是什么?还用到C++啊!!越来越晕了~
@willieQ: 进程是什么,知道吗?
不想让人看到的地方就封装成类库(最好进行一下混淆)提供就可以了呗。
不过说实话,这种做法带来的版本间的同步和Bug的定位及调试的麻烦是很大的。建议除了一些核心或变化不大的代码采取一下这种控制策略,非核心代码就别限制啦。
代码不是什么关键机密,让别人看估计都没多少人愿意看,需要控制一下别让人把代码拷贝出去了就可以了。
怎么控制拷贝呢?不可能24小时监控吧。
核心的模块,提供dll引用,不过你需要有能力保证提供的dll是具备稳定性的,不然团队的人开发起来相当郁闷。
至于svn,一般根据情况设置某些目录对于发者的权限(只读或写)
svn读写也控制不了拷贝出去吧~~
可以将项目分拆成几个solution,然后用nuget打包,建立一个nuget服务器,用nuget去更新各个包。用svn分别管理各个solution
谢谢,我去了解一下nuget!
我也正好在找这方面的问题,有机会一起交流。
一起交流啊!!!
不同的人开发不同的模块 最后交由你自己组装。
模块之间通过接口调用,返回模拟数据。
这样感觉会把原来的项目要重构~~~
@willieQ: 那你有时间的话,重构是好事。
不过重构要慎重!!!