我需要检查ConfigureServices方法当前托管环境名称是否为"开发".
所以使用IHostingEnvironment.IsDevelopment()方法对我来说可能没问题,但与Configure方法不同,我没有IHostingEnvironment env.
当我发布一个 ASP.NET Core 3.0 项目时,我得到了一些本地化的文件夹,其中显示的 4 个程序集位于每个文件夹中。我不确定为什么包含这些文件夹和文件。我的包都没有引用CodeAnalysis包。
我添加<PreserveCompilationContext>false</PreserveCompilationContext>了 csproj 文件,但没有帮助。有没有办法排除它们?
是否可以在.net核心应用程序中查看项目的依赖项?我正在使用Visual Studio 2017 Professional.
目前我在我的网站中引用了以下的金块包csproj.
<ItemGroup>
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.1" />
<PackageReference Include="SimpleInjector.Integration.AspNetCore.Mvc" Version="4.0.8" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
您可以在哪里导航依赖项.
但它很难找到一个特定的依赖 - 如果你知道你在寻找什么,树就是好的.有没有办法输出依赖程序集的平面列表和那些版本?
这应该很简单,但是我还没有找到停止这种情况的方法。Visual Studio发布了许多本地化的DLL-似乎有德国本地化,西班牙本地化,意大利本地化,法国本地化,日本本地化,俄罗斯本地化和韩国本地化。我有一个ASP.NET Web API ODATA应用程序,当我使用Visual Studio 2017发布项目时,这些本地化的dll占用了bin文件夹中的不必要空间。我的应用程序仅需要支持En-US。我该如何进行更改?已发布的bin文件夹的屏幕截图:
当我发布我的.NET Core应用程序时,它会输出一个runtimes包含以下子目录的目录:
- publish/runtimes/
- debian.8-x64/
- fedora.23-x64/
- fedora.24-x64/
- opensuse.13.2-x64/
- opensuse.42.1-x64/
- osx/
- osx.10.10-x64/
- rhel.7-x64/
- ubuntu.14.04-x64/
- ubuntu.16.04-x64/
- ubuntu.16.10-x64/
- unix/
- win/
Run Code Online (Sandbox Code Playgroud)
在我的CI/CD服务器上,我使用以下命令发布我的应用程序:
dotnet publish -c Release -o ..\publish
Run Code Online (Sandbox Code Playgroud)
我在项目文件中的发布设置如下:
我只计划在Windows 2016 Server上发布此应用程序,因此runtimes不需要OSX/Linux/Unix 文件夹.更糟糕的是,在某些情况下,这些runtimes文件夹包含dlls导致OSA扫描误报的已知易受攻击.
有没有办法将项目配置为仅输出win运行时文件夹?
更新
我已经尝试了@ahsteele的建议,并且将RID添加到我的csproj文件的输出与我没有指定RID的情况相同.
当我运行CI/CD命令示例时
dotnet publish -c Release -r win10-x86 -o ..\publish
Run Code Online (Sandbox Code Playgroud)
我相信它创建了一个自包含的部署.我的发布目录从55MB变为120MB,从237个文件变为482个文件.
更新2
我已经尝试为发布步骤指定我的启动项目,并且它将运行时目录构建得更紧凑.
这是我正在运行的构建命令:
dotnet publish .\startupProject.csproj -c Release -o ..\publish
Run Code Online (Sandbox Code Playgroud)
这是输出:
- …Run Code Online (Sandbox Code Playgroud)