关于dotnet web网站的bin目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于dotnet web网站的bin目录相关的知识,希望对你有一定的参考价值。

说得有点多,还请高手指教,谢谢! 用visual studio2010建立的web项目,整个解决方案里面还建立了很多其它的类库,编译的路径都是默认值, web项目引用了其它的类库,再生成部署网站以后,在网站里面有个bin目录,所有引用的项目都在这个bin目录里面生成了dll文件,那么我的问题来了,这个bin目录中所有的dll在iis服务器里面,是由服务器自动加载的,意思是不是说服务起来以后,服务器就会把这些dll文件全部加载进去,不管有没有客户端请求到来?全部加载进去的概念可不可以如下理解,就是通过反射生成某个dll中类的实例的时候,就不需要再通过assembly.load来加载这个dll文件,直接通过某个dll里面的类的全名(命名空间+类名)来反射实例化就行了?
但是服务器不是已经自动加载了么?
反射的时候常见的写法是下面这个样子:
Assembly assembly = Assembly.LoadFrom("dll的完全路径名");
XXX xxx = (XXX) assembly.CreateInstance(“class命名空间+类名”);
我的意思是服务器自动将bin目录里面的dll全部加载进去了,那我们这上面的这两句代码里面是不是只用第二句就可以直接反射创建类的实例,而不用写第一句进行加载呢?
服务器bin目录的加载和我们第一句代码中的load加载是一个意思么?有什么区别呢?

参考技术A bin下的是动态按需加载的,也就是,你访问页面需要这个dll,IIS才加载。
因此
Assembly assembly = Assembly.LoadFrom("dll的完全路径名");
XXX xxx = (XXX) assembly.CreateInstance(“class命名空间+类名”);

第一句告诉IIS,我需要bin下的XXX.dll,然后IIS加载后,第二句才可以使用。
因此第一句不可省略。追问

如果是动态加载的,那是不是dll不放在bin目录下面也没问题?这样的话,不用反射的正常处理的时候,iis还能不能找到dll文件呢?还有就是那在bin目录里面的dll,反射load的时候怎么写它的全路径呢?

参考技术B 不加载怎么知道dll里面类的方法和属性呢?追问

但是服务器不是已经自动加载了么?
由于追问比较长,写在问题补充里面去了。谢谢你的回答!XXX假设是项目里面的一个类

如何通过 FTP 发布 dotnet core web 后端?

【中文标题】如何通过 FTP 发布 dotnet core web 后端?【英文标题】:How to publish dotnet core web back-end by FTP? 【发布时间】:2019-12-20 12:09:39 【问题描述】:

我想发布 dotnet 核心程序不使用 Visual Studio。 我使用了dotnet build /p:DeployOnBuild=true /p:PublishProfile=FTP(配置文件 FTP 在 Visual Studio 中没有任何问题)。但是这条命令运行后,FTP 网站上没有文件。我不知道这个命令的细节。所以我使用了 FolderProfile 而不是 FTP 并且效果很好。 Micorsoft Docs 没有 dotnet cli 的 ftp 发布示例。我的 FTP 配置文件像这样

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FTP</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>**.**.**.**\api</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <ProjectGuid>28bdbda4-4eb1-4b10-b5bd-d150e6d9****</ProjectGuid>
    <publishUrl>ftp://**.**.**.**</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <FtpPassiveMode>True</FtpPassiveMode>
    <FtpSitePath></FtpSitePath>
    <UserName>webadmin</UserName>
    <_SavePWD>True</_SavePWD>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <SelfContained>false</SelfContained>
    <EnvironmentName>Test</EnvironmentName>
  </PropertyGroup>
</Project>

dotnet cli ftp 发布有解决方案吗?


命令dotnet build -v n /p:DeployOnBuild=true /p:PublishProfile=FTP : 结尾:

1>Project "FTPTest.sln" on node 1 (Restore target(s)).     
1>ValidateSolutionConfiguration:         
Building solution configuration "Debug|Any CPU".       
Restore:         
Committing restore...         
Assets file has not changed. Skipping assets file writing. 
Path: FTPTest\obj\project.assets.json         
Restore completed in 51.54 ms for FTPTest.csproj.         
NuGet Config files used:             
C:\Users\*******\AppData\Roaming\NuGet\NuGet.Config             
C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config         
Feeds used:             
https://api.nuget.org/v3/index.json             
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\     
1>Done Building Project "FTPTest.sln" (Restore target(s)).   
1:2>Project "FTPTest.sln" on node 1 (default targets).     
1>ValidateSolutionConfiguration:         
Building solution configuration "Debug|Any CPU".   
1:2>Project "FTPTest.sln" (1:2) is building 
2>GenerateTargetFrameworkMonikerAttribute:       
Skipping target 
"GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.       
_CoreGenerateRazorAssemblyInfo:       
Skipping target "_CoreGenerateRazorAssemblyInfo" 
because all output files are up-to-date with respect to the input files.      
CoreGenerateAssemblyInfo:       
Skipping target "CoreGenerateAssemblyInfo" because all output files are up-to-date with respect to the input files.       
CoreCompile:       
Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.       
_CopyOutOfDateSourceItemsToOutputDirectory:       
Skipping target 
"_CopyOutOfDateSourceItemsToOutputDirectory" because all output files are up-to-date with respect to the input files.       
_CopyOutOfDateSourceItemsToOutputDirectoryAlways:         
GenerateBuildDependencyFile:       
Skipping target "GenerateBuildDependencyFile" because all output files are up-to-date with respect to the input files.       
GenerateBuildRuntimeConfigurationFiles:       
Skipping target "GenerateBuildRuntimeConfigurationFiles" because all output files are up-to-date with respect to the input files.       
CopyFilesToOutputDirectory:         
FTPTest -> .\bin\Debug\netcoreapp2.2\**********.dll       
_DeletePublishIntermediateOutputPath:
......some details......
 Publish:
         FTPTest -> .\obj\Release\netcoreapp2.2\PubTmp\Out\
         No web.config found. Creating '.\obj\Release\netcoreapp2.2\PubTmp\Out\web.config'
     2>Done Building Project ".\*******.csproj" (default targets).
     1>Done Building Project "********.sln" (default targets).

Build succeeded.
    0 Warning(s)
    0 Error(s)

【问题讨论】:

将详细级别设置为详细:dotnet build -v d /p:DeployOnBuild=true /p:PublishProfile=FTP 并重试。然后与我们分享命令行中写入的内容。请将输出放到您的原始帖子中。 感谢您的帮助!命令信息被更新。而且我发现该命令没有运行任何关于 ftp 的内容。 根据您的输出,它仅发布到本地目录 .\obj\Release\netcoreapp2.2\PubTmp\Out`. It does not attempt to publish to an FTP-Server. The reason for this might be that /p:PublishProfile=FTP` 没有正确引用您的 pubxml 文件。尝试引用包含其相对路径的 pubxml 文件,如下所示:/p:PublishProfile=FTP\Properties\PublishProfiles\FTP.pub.xml。请确保在解决方案所在的路径中执行dontnet build ... 我使用了与 FTP 配置文件具有相同目录的文件夹配置文件。它运作良好。该命令与 .csproj 文件位于同一目录中。 &lt;EnvironmentName&gt;Test&lt;/EnvironmentName&gt; 是一个特殊的环境变量。我可以在已发布的临时目录中找到它。 &lt;environmentVariables&gt; &lt;environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Test" /&gt; &lt;/environmentVariables&gt;web.config 【参考方案1】:

尝试在此处查找更多信息:https://docs.microsoft.com/en-us/dotnet/core/deploying/deploy-with-cli

【讨论】:

此链接仅包含有关出版的基本信息。但是,要求是使用 CLI 发布到 ftp 使用 FTP 发布仅适用于 Visual Studio。我发布文件夹,最后使用第三个工具将它们部署到远程。例如,npm 工具 -- gulp。 为什么这被标记为答案这个页面是无用的并且没有任何关于FTP的信息。

以上是关于关于dotnet web网站的bin目录的主要内容,如果未能解决你的问题,请参考以下文章

web网站升级备份脚本

如何通过 FTP 发布 dotnet core web 后端?

dotnet程序员是干啥的啊

关于WEB前端开发

综合架构web服务之nginx详解

WEB服务器4--IIS中网站Web应用程序和虚拟目录