C# 无法部署具有特定文件夹写入权限的ASP.NET MVC

C# 无法部署具有特定文件夹写入权限的ASP.NET MVC,c#,asp.net-mvc,iis-10,C#,Asp.net Mvc,Iis 10,我一直在尝试为应用程序创建错误日志功能,以便在web.config中启用时,在服务器路径~/ErrorLogs文件夹中创建错误日志文本文件 但是,尽管尝试按照下面链接上的说明进行操作,但在IIS服务器(版本10)上测试时,我仍然收到一条“权限被拒绝”消息: 以下是我的项目目标wpp文件: <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.micros

我一直在尝试为应用程序创建错误日志功能,以便在
web.config
中启用时,在服务器路径
~/ErrorLogs
文件夹中创建错误日志文本文件

但是,尽管尝试按照下面链接上的说明进行操作,但在IIS服务器(版本10)上测试时,我仍然收到一条“权限被拒绝”消息:

以下是我的项目目标wpp文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<Target Name="SetupCustomAcls" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">  
  <ItemGroup>
    <MsDeploySourceManifest Include="setAcl">
      <Path>$(_MSDeployDirPath_FullPath)\ErrorLogs</Path>
      <setAclAccess>Read,Write</setAclAccess>
      <setAclResourceType>Directory</setAclResourceType>
      <AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
    </MsDeploySourceManifest>
  </ItemGroup>
</Target>

<Target Name="DeclareCustomParameters" AfterTargets="AddIisAndContentDeclareParametersItems">
  <ItemGroup>
    <MsDeployDeclareParameters Include="ErrorLogsSetAclParam">
      <Kind>ProviderPath</Kind>
      <Scope>setAcl</Scope>
      <Match>^$(_EscapeRegEx_MSDeployDirPath)\\ErrorLogs$</Match>
      <Description>Add write permission to the ErrorLogs folder.</Description>
      <DefaultValue>{$(_MsDeployParameterNameForContentPath)}/ErrorLogs</DefaultValue>
      <Value>$(_DestinationContentPath)/ErrorLogs</Value>
      <Tags>Hidden</Tags>
      <Priority>$(VsSetAclPriority)</Priority>
      <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
    </MsDeployDeclareParameters>
  </ItemGroup>
</Target>
</Project>

$(\u MSDeployDirPath\u FullPath)\ErrorLogs
读,写
目录
setAclResourceType;setAclAccess
提供者路径
setAcl
^$(\u EscapeRegEx\u MSDeployDirPath)\\错误日志$
向ErrorLogs文件夹添加写入权限。
{$(\u MsDeployParameterNameForContentPath)}/ErrorLogs
$(\u DestinationContentPath)/ErrorLogs
隐藏的
$(VsSetAclPriority)
真的

是否有人可以建议我需要采取的任何其他步骤,以便在部署web应用程序时自动设置这些权限?

如果要实现此要求,您需要遵循以下步骤:

  • 在VisualStudio中选择应用程序,右键单击并选择“卸载项目”
  • 在.csproj文件中添加以下代码
注意:确保添加的文件夹路径正确

 <Target Name="SetupCustomAcls" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
<ItemGroup>
  <MsDeploySourceManifest Include="setAcl">
    <Path>$(_MSDeployDirPath_FullPath)\test</Path>
    <setAclAccess>Read,Write</setAclAccess>
    <setAclResourceType>Directory</setAclResourceType>
    <AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
  </MsDeploySourceManifest>
  <MsDeploySourceManifest Include="setAcl">
    <Path>$(_MSDeployDirPath_FullPath)\bin</Path>
    <setAclUser>iusr</setAclUser>
    <setAclAccess>Read</setAclAccess>
    <setAclResourceType>Directory</setAclResourceType>
    <AdditionalProviderSettings>setAclUser;setAclResourceType;setAclAccess</AdditionalProviderSettings>
  </MsDeploySourceManifest>
</ItemGroup>

$(\u MSDeployDirPath\u FullPath)\test
读,写
目录

问候,,
Jalpa

你能分享被删除的错误信息快照和示例代码来重现这个问题吗?嗨@Panchal,如果我今天下班回来的话,我可以这样做。交易是,我故意制造了另一个错误,这样我就可以启动我的错误书写程序。但是,焦点错误表示asp.net需要权限才能写入文件夹。因此,我不完全确定这样的日志记录将有助于准确完成什么。重要的是,每次web部署时都必须手动更改这一文件夹的权限,以便开始错误写入。我只是注意到我正在使用FTP部署方法。我必须使用Web部署方法才能工作吗?是的,您需要使用Web部署方法来工作代码。FTP会将文件上传到FTP服务器(可以是任何处理FTP的操作系统)。我有我的服务器的IP,但它的DNS是本地到它自己的网络,而不是到WWW。我注意到这个本地DNS到它的网络,atm.affirmhealthcenter.com,是无法识别的。我该怎么办?好的,对不起。我明白了。但是现在我使用MySQL作为数据库。Web部署似乎只支持OLE DB/SQL Server???刚刚开始工作。非常感谢你的帮助!
<Target Name="DeclareCustomParameters" AfterTargets="AddIisAndContentDeclareParametersItems">
<ItemGroup>
  <MsDeployDeclareParameters Include="testSetAclParam">
    <Kind>ProviderPath</Kind>
    <Scope>setAcl</Scope>
    <Match>^$(_EscapeRegEx_MSDeployDirPath)\\test$</Match>
    <Description>Add write permission to the Elmah folder.</Description>
    <DefaultValue>{$(_MsDeployParameterNameForContentPath)}/test</DefaultValue>
    <Value>$(_DestinationContentPath)/test</Value>
    <Tags>Hidden</Tags>
    <Priority>$(VsSetAclPriority)</Priority>
    <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
  </MsDeployDeclareParameters>
  <MsDeployDeclareParameters Include="BinSetAclParam">
    <Kind>ProviderPath</Kind>
    <Scope>setAcl</Scope>
    <Match>^$(_EscapeRegEx_MSDeployDirPath)\\Bin$</Match>
    <Description>Add read permission to the bin folder.</Description>
    <DefaultValue>{$(_MsDeployParameterNameForContentPath)}/bin</DefaultValue>
    <Value>$(_DestinationContentPath)/bin</Value>
    <Tags>Hidden</Tags>
    <Priority>$(VsSetAclPriority)</Priority>
    <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
  </MsDeployDeclareParameters>
</ItemGroup>