2016-03-30 6 views
3

私たちはチームで構築できないF#プロジェクトを持っており、解決策を見つけられません。チームシップを通じて構築するとき、fscへの議論は私たちには正しいものではないようです。同じソースでmsbuild /t:Rebuild /p:Configuration=Releaseを手動で実行すると、すべて正常に動作します。F#プロジェクトを作成するときに参照がfscにどのように作成されますか?

私は(それが大規模なプロジェクトではありません)私が何を意味するかを示すために失敗しfsprojファイルの内容を提供します:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
    <SchemaVersion>2.0</SchemaVersion> 
    <ProjectGuid>3e68783b-823c-4394-85cb-4a05aa3f3722</ProjectGuid> 
    <OutputType>Library</OutputType> 
    <RootNamespace>SFag.DataRepository</RootNamespace> 
    <AssemblyName>SFag.DataRepository</AssemblyName> 
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> 
    <TargetFSharpCoreVersion>4.4.0.0</TargetFSharpCoreVersion> 
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 
    <Name>Sfag.DataRepository</Name> 
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> 
    <TargetFrameworkProfile /> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <Tailcalls>false</Tailcalls> 
    <OutputPath>bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <WarningLevel>3</WarningLevel> 
    <DocumentationFile>bin\Debug\SFag.DataRepository.XML</DocumentationFile> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <Tailcalls>true</Tailcalls> 
    <OutputPath>bin\Release\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <WarningLevel>3</WarningLevel> 
    <DocumentationFile>bin\Release\SFag.DataRepository.XML</DocumentationFile> 
    </PropertyGroup> 
    <ItemGroup> 
    <Reference Include="mscorlib" /> 
    <Reference Include="System" /> 
    <Reference Include="System.Core" /> 
    <Reference Include="System.Numerics" /> 
    </ItemGroup> 
    <ItemGroup> 
    <Compile Include="AssemblyInfo.fs" /> 
    <Compile Include="Tilsynsmyndighet.fs" /> 
    <None Include="Script.fsx" /> 
    <None Include="paket.references" /> 
    <Compile Include="KonsesjonRepository.fs" /> 
    </ItemGroup> 
    <ItemGroup> 
    <ProjectReference Include="..\Sfag.Contracts\Sfag.Contracts.csproj"> 
     <Name>Sfag.Contracts</Name> 
     <Project>{260b3032-028d-417e-acde-1c332744b1bf}</Project> 
     <Private>True</Private> 
    </ProjectReference> 
    </ItemGroup> 
    <PropertyGroup> 
    <MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion> 
    </PropertyGroup> 
    <Choose> 
    <When Condition="'$(VisualStudioVersion)' == '11.0'"> 
     <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')"> 
     <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath> 
     </PropertyGroup> 
    </When> 
    <Otherwise> 
     <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')"> 
     <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath> 
     </PropertyGroup> 
    </Otherwise> 
    </Choose> 
    <Import Project="$(FSharpTargetsPath)" /> 
    <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
     Other similar extension points exist, see Microsoft.Common.targets. 
    <Target Name="BeforeBuild"> 
    </Target> 
    <Target Name="AfterBuild"> 
    </Target> 
    --> 
    <Choose> 
    <When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.6.1'"> 
     <ItemGroup> 
     <Reference Include="FSharp.Core"> 
      <HintPath>..\packages\FSharp.Core\lib\net40\FSharp.Core.dll</HintPath> 
      <Private>True</Private> 
      <Paket>True</Paket> 
     </Reference> 
     </ItemGroup> 
    </When> 
    </Choose> 
    <Choose> 
    <When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And $(TargetFrameworkVersion) == 'v4.6.1'"> 
     <ItemGroup> 
     <Reference Include="FSharp.Data.SqlClient"> 
      <HintPath>..\packages\FSharp.Data.SqlClient\lib\net40\FSharp.Data.SqlClient.dll</HintPath> 
      <Private>True</Private> 
      <Paket>True</Paket> 
     </Reference> 
     <Reference Include="System.Data"> 
      <Paket>True</Paket> 
     </Reference> 
     <Reference Include="System.Xml"> 
      <Paket>True</Paket> 
     </Reference> 
     </ItemGroup> 
    </When> 
    </Choose> 
</Project> 

手動msbuildを実行している私たちはfsc.exeに正しい引数を取得する場合:

C:\Program Files (x86)\Microsoft SDKs\F#\4.0\Framework\v4.0\fsc.exe -o:obj\Release\SFag.DataRepository.dll --debug:pdbonly --noframework --define:TRACE --doc:bin\Release\SFag.DataRepository.XML --optimize+ -r:E:\TeamCity\buildAgent2\work\cd80d924274f60cd\src\packages\FSharp.Core\lib\net40\FSharp.Core.dll -r:E:\TeamCity\buildAgent2\work\cd80d924274f60cd\src\packages\FSharp.Data.SqlClient\lib\net40\FSharp.Data.SqlClient.dll -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" -r:E:\TeamCity\buildAgent2\work\cd80d924274f60cd\src\Sfag.Contracts\bin\Release\Sfag.Contracts.dll -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Numerics.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll" --target:library --warn:3 --warnaserror:76 --fullpaths --flaterrors --subsystemversion:6.00 --highentropyva+ "C:\Users\admtoja1\AppData\Local\Temp\.NETFramework,Version=v4.6.1.AssemblyAttributes.fs" AssemblyInfo.fs Tilsynsmyndighet.fs KonsesjonRepository.fs 

チームシティーは、我々はまったく同じ出力を得ることはありませんビルドを実行します:

C:\Program Files (x86)\Microsoft SDKs\F#\4.0\Framework\v4.0\fsc.exe -o:obj\Release\SFag.DataRepository.dll --debug:pdbonly --noframework --define:TRACE --doc:bin\Release\SFag.DataRepository.XML --optimize+ -r:E:\TeamCity\buildAgent2\work\cd80d924274f60cd\src\packages\FSharp.Core\lib\net40\FSharp.Core.dll -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll" -r:E:\TeamCity\buildAgent2\work\cd80d924274f60cd\src\Sfag.Contracts\bin\Release\Sfag.Contracts.dll -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Core.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Numerics.dll" -r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Xml.dll" --target:library --warn:3 --warnaserror:76 --fullpaths --flaterrors --subsystemversion:6.00 --highentropyva+ "E:\TeamCity\buildAgent2\temp\buildTmp\.NETFramework,Version=v4.6.1.AssemblyAttributes.fs" AssemblyInfo.fs Tilsynsmyndighet.fs KonsesjonRepository.fs 

TeamcityバージョンではFSharp.Data.SqlClientへの参照がないというエラーがあります。チームシティーが私の解決策でmsbuildと呼ぶと思って以来、これは本当に奇妙です。

答えて

0

FSharp.Data.ClientはNuGetパッケージから来ており、コンパイルの前にNuGetパッケージが正しく復元されていないと思います。

管理リンクを通じてチームシティーでNuGetを有効

enter image description here

これはおそらくコンパイル前のステップ

enter image description here

希望へのステップをインストールし、これは

+0

私たちはすべてのパッケージを処理するためにpaketを使用していますが、これはそれに関連していました。 –

+0

嬉しい、それは正しい方向にあなたを指差しました。私は今、パッケットをグーグルでやっています:) –

+0

あなたは間違いなく、パッケット、https://fsprojects.github.io/Paket/を検索する必要があります。 nugetパッケージ間のバージョンの競合に対処するのに役立ちます。また、nugetパッケージ以外のものへの参照を持つこともできます。 –

0

を助けNuGetを追加初心者パケの間違い。

<Import Project="..\.paket\paket.targets" /> 

をそして、このファイルは、プロジェクトファイル内の適切な場所にあることも重要:我々は、我々は、Visual Studioでビルドするパッケージの自動決意を持つようにしたいので、我々は我々のプロジェクトファイルに1行を追加する必要があります。私がそれを持っていた場合

<Import Project="$(FSharpTargetsPath)" /> 

それはうまくいきませんでした。だから、私はそれをすぐ下に置き、今はすべてが魅力のように機能します。