我正在尝试通过 TFS 构建和部署 ASP.NET Core 2.0.3 Web API。
在 Visual Studio 中,我已将 Release 配置为针对 x86 平台。 我还在 csproj 中确保了以下内容:
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<Platforms>x86</Platforms>
</PropertyGroup>
本地构建会在文件夹 bin\x86\Debug\netcoreapp2.0 中生成预期输出
在 TFS 中,我有一个新的 .NET CORE 构建配置,其中包含恢复/构建/发布任务。我注意到他们不使用标准的 BuildPlatform 构建变量,我已将其从 Any Cpu 更改为 x86
Build: --configuration $(BuildConfiguration)
Publish: --configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)
他们只使用 BuildConfiguration,即 Debug 或 Release。这会生成一个 Any CPU dll,它将在发布服务器上作为 x64 运行。
我尝试将 -r win7-x86 添加到发布命令中,但这导致发布了一个独立的部署,这不是我想要的。
我尝试将 -r win7-x86 添加到构建命令中,这会生成正确的 dll,但发布命令执行其自己的隐式构建,并且不使用先前构建任务的输出。
如何让 TFS 为 Web 应用程序发布 x86 DLL(依赖于框架)?
最佳答案
对于 .NET Core 应用程序(netcoreapp*
- 不是 .NET Framework 上的 ASP.NET Core),构建过程中使用的平台通常并不重要。
位数是通过用于加载和运行应用程序的 dotnet.exe
主机的版本确定的。例如。 C:\Program Files\dotnet\dotnet.exe
(64 位)或 C:\Program Files (x86)\dotnet\dotnet.exe
(32 位)。
RuntimeIdentifier
MSBuild 属性(-r
开关设置的内容)仅与独立部署相关,但还有一个用于指定 的选项 - self-contained false
(=> SelfContained
MSBuild 属性),以便在不创建独立部署的情况下构建特定于运行时的应用程序。这通常只需要过滤特定于运行时的 Assets - 例如仅在 runtime
子文件夹中包含 SQLite native 库的 win-x32 版本,而不是 windows/linux/Mac 等的多个版本。
关于tfs - 在 TFS 上以 x86 构建 ASP.NET Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47866237/