2014-09-09 3 views
1

이전에 Visual Studio 2012에서 웹 프로젝트를 사용하여 '웹 게시'버튼을 누를 수 있었고 .config 또는 .cs 파일을 변경하지 않은 경우 대부분의 내 세션 데이터가 지속될 것이므로 .css 또는 .html 파일을 조금만 변경할 때마다 다시 로그인 할 필요가 없습니다.게시 웹에서 IIS 세션이 손실되었습니다.

w3wp.exe로 디버깅 기능을 사용하기 위해 일부 설정을 망쳐 놓은 후 게시 간 변경 사항이 전혀 없더라도 웹 게시를 클릭 할 때마다 세션 데이터가 손실됩니다.

나는 이것을 바꾸기 위해 무엇을했는지 모르지만 매 시간마다 로그인하지 않고 정적 파일을 변경할 수 있어야합니다. 세션이 종료되지 않게하려면 어떻게합니까?

+1

당신이 버전 제어의 변경 사항을 추적 할 수 있습니다 설정하는 것이 좋습니다? – trailmax

+0

@ trailmax 불행히도 필자는 변경하기 전에 내 작업 공간을 롤백하여 이전 동작을 복원하지 않았습니다. –

+0

설정에서 게시 프로파일 -> 파일 게시 옵션을 확인하십시오. 게시 할 필요가없는 경우 "대상에서 파일을 추가로 제거"가 선택되어 있지 않은지 확인하고 App_Data 폴더에서 파일을 제외하십시오. –

답변

3

게시 대상에 따라 다릅니다.

  • web.config 다시 복사 된은 (내용이 중요하지 않음)
  • bin 폴더는 새로운 타임 스탬프로, 다시 (같은 DLL을 수정 : 당신이 의도적으로 변경하지 않았더라도 경우, 응용 프로그램 도메인이 언로드 수정으로 간주됩니다)

AFAIK, 게시 항상 업데이트 web.config. 한가지 확실하지 않은 점은 변환 (.debug.config 또는 .release.config)이 없는지 여부를 업데이트하는 경우 web.config입니다.

것들을 몇 가지 당신이 시도 할 수 있습니다

  • 설정 web.config의에 "없음"빌드 작업을. 그렇게하면 출력이 모두 복사되지 않습니다.

  • "정적 컨텐츠"라고하는 새 빌드 구성을 정의하십시오. 이 빌드 구성을 사용하여 새 게시 프로파일, 즉 "정적 컨텐츠"를 정의하십시오. 이 때문에 앱 도메인이 언로드되지 않으며 세션이 손실되지 않습니다 전개되는이 2 개 개의 폴더를 방지 할 수

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
        ... 
        <OutputPath>bin\</OutputPath> 
        <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn> 
        <ExcludeFilesFromDeployment>web.config</ExcludeFilesFromDeployment> 
        <ExcludeFoldersFromDeployment>bin</ExcludeFoldersFromDeployment> 
    </PropertyGroup> 
    

    당신의 .csproj 파일에 다음 줄을 추가합니다. 그리고 필요할 때 다른 프로필을 사용하여 전체 릴리스를 수행 할 수도 있습니다.

  • 게시> 설정> 파일 게시 옵션에서 "기존 파일 모두 삭제 ..."옵션이 선택 취소되어 있는지 확인하십시오.

이러한 해결 방법 중 하나 또는 전부를 사용하여 문제를 해결할 수 있기를 바랍니다.

업데이트 : 덧글에 따라 간단히 AfterBuild 변경된 파일 만 게시 폴더에 복사하는 대상이 있습니다. 다음 코드를 .csproj 파일에 복사하고 경로를 적절하게 조정하십시오.

<!-- define static content to be copied over --> 
<ItemGroup> 
    <SourceFiles Include="CSS\**\*.css" /> 
    <SourceFiles Include="Scripts\**\*.js" /> 
</ItemGroup> 

<!-- The target that gets executed after build finishes and copies files recursively --> 
<Target Name="AfterBuild"> 
    <Copy 
     SourceFiles="@(SourceFiles)" 
     DestinationFolder="C:\Publish\YourApp\%(RecursiveDir)" 
     SkipUnchangedFiles="True" 
    /> 
</Target> 

이제 빌드 할 때 정적 콘텐츠가 게시 폴더에 게시되는 것을 볼 수 있습니다.

주 :

  • %(RecursiveDir) 복사 재귀 적으로 파일, 폴더 트리를 재 구축하는 데 도움이됩니다. css\fontscss\images과 같이 중첩 된 폴더가있는 경우 유용합니다.

  • Copy 작업에는 조정할 수있는 여러 가지 속성 (예 : ContinueOnError, OverwriteReadOnlyFiles)이 있습니다.

  • 대상 경로에서 표준 VS 매크로를 사용할 수도 있습니다 (예 : $(SolutionRoot), $(OutputDir) 등).

+0

새로운 빌드 구성을 제외하고 해결 방법을 시도했지만 상황에 따라 새 구성을 만들 수 없습니다. 게시 전과 후에 게시 폴더를 비교 한 결과 web.config가 변경되지 않은 것으로 나타났습니다. 변경되는 파일은 .dll과 .pdb뿐입니다. 이들을 매번이 아닌 다른 때에 게시 할 수있는 방법이 있습니까? –

+0

"변경하지 않음"이란 파일이 타임 스탬프 또는 내용을 수정했음을 의미합니까? 전자는 항상 변할 것이고, 후자는 당신이 아무것도 바꾸 었는지 아닌지에 달려있다. 언제든지 빌드를 수행하면 소스 파일이 변경되면 DLL이 수정됩니다. 게시되지 않도록하는 유일한 방법은 제외를 사용하는 것입니다. 새 빌드 구성을 만들 수없는 경우 디버그 빌드 구성에 제외를 추가 할 수 있습니다. 물론, 이것은'.cs '가 변경 될 때마다 릴리즈 빌드/퍼블리시를해야한다는 것을 의미합니다. – Mrchief

+0

또 다른 방법은 js/css/images 파일을 게시 출력 폴더에 "게시 빌드"이벤트로 복사하는 것입니다. xcopy를 수행하는 프로젝트에서 Post 빌드 이벤트를 지정하거나 csproj에서 AfterBuild 대상을 지정하여이 작업을 수행 할 수 있습니다. 예제가 필요한 경우 알려주십시오. 이렇게하면 언제든지 빌드 할 때마다 정적 파일이 항상 복사됩니다. 게시를 해지 할 필요가 없으며 모든 문제를 피할 수 있습니다. – Mrchief

1

asp.net 세션을 의미합니까? 그렇다면 응용 프로그램 풀이 다시 시작될 때마다 복원됩니다. 그것은 원인 일 수 있습니다 :

  • 웹 설정 변경
  • bin 폴더의 컨텐츠 변화
  • IIS의 응용 프로그램 풀 재활용

일반적으로는 세션 데이터에 의존하는 잘못된 관행입니다. . 당신은

항상 데이터의 존재를 확인하고 로그인하는 사용자를 시작하지 않고하지 않을 경우 종료를 복원해야하지만 SateServer 또는 SQLSERVER 모드로 실행하면 당신은 살아 세션을 유지할 수 있습니다 : Session-State Modes

+0

내 경우에는 제안 된 해결 방법이 실현되지 않을 수 있지만 원인에 대해서는 정확합니다. –

0

솔루션 1 :

정적 파일을 모두 포함하도록 IIS에서 새 사이트를 설정하십시오. 예 :

문구를 넣을 확인이

NewSite 사이트/CSS는/.CSS NewSite 사이트/스크립트/의 .js NewSite 사이트/JQuery와 NewSite 사이트/

부트 스트랩 (다른 사이트보다 돈을 다른 응용 프로그램 풀을 사용하여 't 실제로이 구조를 만들고, 당신은

이 그것을주세요) 프로젝트 대 새로운으로 관리 할 수 ​​있습니다 localhost 호스트 헤더 (MachineName 및 Port) 내부 액세스 전용.

이제 기존 프로젝트로 솔루션에 새 프로젝트를 만들고 위의 구조와 일치하는 위치로 파일을 옮깁니다.// {컴퓨터 이름} :

설정 새로운는 HTTP 만든 새 사이트에 CSS를, 스크립트, 등 등을 배포 할 프로필을 게시 포트

전화/전자 w Dev_PublishStatics 또는 Prod_PublishStatics (같은 프로필 뭔가를 당신) 원하는

이제 프로젝트 2에서 CSS/스크립트를 변경하고 자신의 메인 사이트에서 -Lastly 사이트 A

를 재설정으로 게시, 스크립트 등 CSS는 대한 디렉토리를 가리키는 가상 디렉터리를 만들 수 있습니다

등등.

- 참고 ASPX 파일 등을 새 사이트로 이동하고 원하는 경우 가상 디렉터리를 통해 매핑 할 수도 있지만 dll은 두 사이트의 Bin 폴더에 있어야합니다. 그러나 코드가 변경되면 두 사이트 모두에 게시해야한다는 점을 기억하십시오.

0

해결 방법 2 :

변경 응용 프로그램 풀 설정,

IIS Manager 
-> Application Pools 
->-> Select Site Application Pool 
->->-> Advanced Settings on the actions menu 

이제 True로 구성 변경에 대한 해제 재활용 설정

, 이것은 구성 변경에 재설정에서 사이트를 방지 할 수 있습니다. 새 코드를로드해야 할 때 직접 재설정해야합니다.

또한

Start Mode = Always Running 
Disable Overlapped Recycle = true 
관련 문제