我有.NET Core projects我正在尝试使用最新的Mono和.NET Core 1.0.1工具(基于MSBuild的csproj工具)在Mac和Linux上使用Travis CI构建。他们定位netstandard1.6.1
,net45
和net461
。我从Travis CI得到的错误是:
/usr/share/dotnet/sdk/1.0.1/Microsoft.Common.CurrentVersion.targets(1111,5): 错误MSB3644:框架的引用程序集 未找到“.NETFramework,Version = v4.5”。要解决此问题,请安装 此框架版本的SDK或Targeting Pack或重新定位您的 应用程序到您拥有SDK的框架版本 或安装了Targeting Pack。请注意,程序集将被解析 来自全球大会缓存(GAC)并将用于代替 参考组件。因此您的装配可能不正确 针对您想要的框架。
Mono不支持基于VS 2017 MSBuild的csproj项目吗?如何构建我的项目?
答案 0 :(得分:6)
据我所知,这里有两个选项:
使用this issue中所述的FrameworkPathOverride
环境变量指向它们。
将Travis构建限制为仅针对.NET Core构建。根据我的经验,这简单得多。
这是Noda Time .travis.yml
文件,当我可以迁移时,我将用于Noda Time - 这是初步的,至少可以说,但它确实构建了......
language: csharp
mono: none
dotnet: 1.0.1
dist: trusty
script:
- dotnet restore src/NodaTime
- dotnet restore src/NodaTime.Test
- dotnet restore src/NodaTime.Serialization.Test
- dotnet build src/NodaTime -f netstandard1.3
- dotnet build src/NodaTime.Test -f netcoreapp1.0
- dotnet build src/NodaTime.Serialization.Test -f netcoreapp1.0
- dotnet run -p src/NodaTime.Test/*.csproj -f netcoreapp1.0 -- --where=cat!=Slow
- dotnet run -p src/NodaTime.Serialization.Test/*.csproj -f netcoreapp1.0
关于此的几点说明:
dist: xenial
没有运行时,我感到很惊讶,但事实并非如此。 (它声称环境不支持.NET Core。)我猜这会改变。dotnet run
运行测试dotnet run
的目录名称(根据dotnet restore
和dotnet build
)但似乎是事物的方式。我会找一个bug报告...... 在任何一种情况下,我都建议还使用基于Windows的CI构建来检查所有内容是否在Windows上构建和运行(理想情况下测试您支持的每个框架)。
答案 1 :(得分:1)
截至昨天(5月5日),@ dasMulli指出Mono发布了与.NET Core兼容的Mono 5.0 Beta 2(5.0.0.94)!这是his post on dotnet/sdk#335。这是指向最新beta release
的链接我的.travis.yml文件如下:
state = tf.zeros([20, lstm_cell.state_size[0]*2)
答案 2 :(得分:1)
Mono DOES支持构建VS2017 .Net Framework项目,因为它现在使用msbuild。
要使其在Travis CI上运行有点棘手,但这应该可以解决问题:
┌───────┬─────────────┐
│ seq0 │ result │
├───────┼─────────────┤
│ 01-04 │ 01-xx-xx-04 │
│ 02 │ xx-02-xx-xx │
│ 02-03 │ xx-02-03-xx │
│ 02-04 │ xx-02-xx-04 │
└───────┴─────────────┘
基本上,您需要手动手动安装dotnet-sdk及其所有依赖项。
然后只需调用msbuild:
- wget -q https://packages.microsoft.com/config/ubuntu/14.04/packages-microsoft-prod.deb
- sudo dpkg -i packages-microsoft-prod.deb
- wget -q http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/gcc-5-base_5.4.0-6ubuntu1~16.04.9_amd64.deb
- sudo dpkg -i gcc-5-base_5.4.0-6ubuntu1~16.04.9_amd64.deb
- wget -q http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.9_amd64.deb
- sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.9_amd64.deb
- wget -q http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7ubuntu0.4_amd64.deb
- sudo dpkg -i libicu55_55.1-7ubuntu0.4_amd64.deb
- sudo apt-get install apt-transport-https
- sudo apt-get install -y libicu55
- sudo apt-get install dotnet-runtime-deps-2.1
- sudo apt-get install dotnet-runtime-2.1
- sudo apt-get install aspnetcore-runtime-2.1
- sudo apt-get install dotnet-sdk-2.1
答案 3 :(得分:0)
您现在可以通过添加NuGet软件包,在Linux上使用Mono构建新样式的csproj项目:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Build">
<OutputType>Exe</OutputType>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<ItemGroup Label="Package References">
<PackageReference
Condition="'$(OS)' != 'Windows_NT'"
Include="Microsoft.NETFramework.ReferenceAssemblies"
PrivateAssets="All"
Version="1.0.0-preview.2" />
</ItemGroup>
</Project>
更多信息可以在Microsoft/dotnet GitHub页面上找到。在撰写本文时,它处于预览状态,但我发现它确实有效。我发现的唯一问题是xUnit项目中的dotnet test
无法正常工作,根据xUnit作者,这不是受支持的方案。