标签和web程序引用问题

有时候,我们会发现不得不用MSBuild进行生成项目,这时会抱怨,MSBuild真是不智能,特别是引用问题。当我们

使用web项目,并且,这个项目使用了外部生成好的dll,这个时候,你就会发现,web项目是没有工程文件的,也就

意味着你没法引用外部生成的dll,这时你会想,把这个引用到其他的层,但是你会失望的发现,为什么还是不行,这

dll还是没有生成到webbin目录下。MSBuild编译始终会报引用问题。

那么,问题就来了,这该如何做能,这时候,我推荐使用项目工程文件中的arget>标签。

当你打开一个项目的工程文件时,你应该发现如下:

  
  
    
  
  
  

注意,这个是系统生成的,默认是把这个注释掉的,需要手动修改掉注释,任务,即之前说MSBuild中的目标,这里默认是有两个的,BeforeBuild 顾名思义,这个表示在MSBuild调用之前,会先调用这个节点中的所有的节点任务,而AfterBuild则相反,这个就表示在MSBuild编程生成成功后才会进行调用

这时候会发现,当有多个target的时候,就会出现调用的问题,默认是从上往下的,当时如果你想有自己的调用方式,这时候你可以如下:


 
     
    

 

在上面的demo中,一共有三个taeget,出现这样,这时候如果你想决定他们的调用顺序,这就需要用到DependsOnTargets属性,这个表示当当前目标调用前,要先保证这个属性中的target先被调用过才能运行当前的target,上面的demo就是说当CheckIn调用前,一定要保证CheckOut和Build先被调用过。

在这里,MSBuild附带了很多的任务,比如复制(Copy)这个就用于解决编译的引用问题,用于创建目录的MakeDir以及用于VS编译的Csc

1,Copy 这个方法就是用于文件的复制,这个就可以解决引用问题,原理是,在MSBuild编译结束后,把缺少的dll通过复制代码复制到需要的bin目录下

         

CopySourceFiles表示要被复制的源文件,可以使用@(ItemType)找到对应的节点,如@(Reference),就表示在工程文件中的Reference节点,当需要找对应节点的子节点时需要使用%(Reference.HintPath),这个表示在Reference节点下的HintPath节点,DestinationFolder这个表示目标路径,是指需要把文件复制到地方,即想要复制的web次层的bin目录下,相对路径,使用就是把这个加到对应需要复制的引用了dll的那个层的工程文件中,加到

  
  
这个节点中间,这时候就会在生成成功后,把对应的dll复制到指定的bin

2,MakeDir这个用于创建文件夹


        \Output\



        

这里就是在目录下创建Output目录

3,Csc用于对于一个项目的编译生成,官方给的demo,学习过工程文件的基本上都知道下面节点的意思,我就不一一介绍了


    
        
    







你可能感兴趣的:(编译搭建)