我有以下建立winexe的NANT CSC目标:
<csc target="winexe" output="${Deploy.dir}\VMIS.exe" debug="${debug}">
<sources>
<include name="${App.dir}\**\*.cs" />
<include name="${Build.dir}\AssemblyInfo.cs" />
<exclude name="${App.dir}\**\AssemblyInfo.cs" />
</sources>
<references refid="Lib.fileset">
</references>
...
</csc>
以下是失败消息:
D:\..\myClass.cs(9,17): error CS0234: The type or namespace name 'Reporting'
does not exist in the namespace 'Microsoft' (are you missing an assembly
reference?)
在myClass.cs中,我使用了引用:
using Microsoft.ReportViewer.WinForms;
在VS中构建我的应用程序没有问题,但我无法使用NANT构建。我想我可能会错过在NANT构建中对Microsoft.ReportViewer.WinForms.dll的引用。不知道我怎么能把这个dll包含在我的垃圾桶中用于NANT?
我试图修改csc target的引用:
<csc ...>
...
<references refid="Lib.fileset">
<include name="Microsoft.ReportViewer.Common.dll" />
<include name="Microsoft.ReportViewer.WinForms.dll" />
</references>
...
</csc>
仍然无法正常工作。我应该使用COPY目标将所有dll文件从bin复制到$(build.dir)吗?
更新:我发现项目引用中的那些Microsoft.ReportViewer.xx.dll文件未复制到本地。如何在NANT中为这两个dll文件模拟复制到本地?我想这可能会解决问题,因为NANT是控制台中的构建应用程序,并且不了解全局缓存中的引用。
答案 0 :(得分:4)
NAnt配置了.NET框架的默认DLL集,并知道这些DLL所在的位置(例如C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319)。当您包含非框架程序集时,无论它们是您的还是第三方,您都可以包含它们,但使用DLL的完整路径:
<include name="C:\Common\ThirdParty.dll" />
您也可以使用变量:
<property name="common.directory" value="C:\Common" />
...
<csc ...>
...
<references>
<inclde name="${common.directory}\ThirdParty.dll" />
</references>
</csc>
答案 1 :(得分:3)
推荐:
在您的NAnt脚本中使用MSBuild来构建您的应用程序。
仅供参考:Visual Studio使用MSBuild编译和构建您的解决方案和项目。
<!-- Verify the right target framework -->
<property name="MSBuildPath" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" />
<target name="Build">
<exec program="${MSBuildPath}">
<arg line='"${SolutionFile}"' />
<arg value="/target:Rebuild" />
<arg value="/verbosity:normal" />
<arg value="/nologo" />
</exec>
</target>
可能性:
不推荐:
使用NAnt的“解决方案”任务,或NAntContrib的“msbuild”任务。
这将简化msbuild调用,但会将您绑定到旧版本的msbuild / VS解决方案/项目文件。不容易支持较新的VS解决方案/项目文件。
希望它有所帮助。