什么是.fsproj文件的#I等价物?

时间:2012-05-23 12:37:39

标签: f#

我想将脚本转换为项目。在脚本中,我使用#I设置引用的.dll的路径。有没有办法直接在.fsproj文件中指定此路径?

由于

2 个答案:

答案 0 :(得分:7)

fsproj文件实际上是一个MS Build脚本,因此您可以使用标准MS Build功能来定义变量(例如包含路径)并在项目文件中使用它们。这不像在F#脚本文件中使用#I指令那么简单,但它应该为您提供类似的功能。

例如,您可以创建一个定义包含路径的文件Includes.proj,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <IncludePath>C:\MyIncludePath</IncludePath>
  </PropertyGroup>
</Project>

然后,您可以修改fsproj文件以引用上述文件,并在参考文献中使用$(IncludePath)。遗憾的是,这必须在文本编辑器中完成(即卸载项目,修改它然后重新加载它):

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="Includes.proj" />
  <!-- lots of other stuff -->
  <ItemGroup>
    <Reference Include="mscorlib" />
    <Reference Include="System" />
    <Reference Include="FSharp.Core" />
    <Reference Include="MyAssembly">
      <HintPath>$(IncludePath)\MyAssembly.dll</HintPath>
    </Reference>
  </ItemGroup>
  <!-- lots of other stuff -->
</Project>

答案 1 :(得分:5)

您可以在Project Properties - &gt;中设置参考文件夹Reference Paths - &gt; Add Folder

如果要以编程方式执行此操作,请在<Project><PropertyGroup><ReferencePath>...下设置参考路径,并在<Project><ItemGroup><Reference><HintPath>...中设置dll的相对路径。这里是a script反向(从fsproj到fsx文件),但它可以给你一些提示继续。