우리의 ASP.Net 웹 프로젝트에서 우리는 우리가 사용하고있는 일부 타사 DLL과 관련된 .refresh 파일이있는 것 같습니다. 그것이 무엇이며 어떻게 / 언제 만들어 졌는지 아십니까?
답변
이러한 파일은 해당 DLL의 경로를 제공하여 Visual Studio에서 찾을 위치를 알려줍니다 (텍스트 편집기에서 열면 확인할 수 있음). 프로젝트에 새 참조를 추가 할 때마다 생성됩니다.
표준 Visual Studio 프로젝트 파일을 만들지 않는 프로젝트 유형을 사용하는 경우 일반적으로 참조 된 DLL에 대한 경로가 여기에 들어갑니다.
답변
에서 여기 :
ASP.NET 프로젝트에서 파일 기반 참조를 추가하면 Bin 폴더에 .refresh 파일이 추가됩니다. 프로젝트가 소스 제어하에있을 때이 파일은 소스 제어에 추가됩니다.
*.dll.refresh
bin 디렉토리를 어지럽히는 파일. 외부 참조를 추가 할 때마다 바로 옆에 dll.refresh 파일이 있습니다. 이러한dll.refresh
파일은 규칙에 대한 예외이며 소스 제어로 이동해야합니다. 웹 프로젝트가 참조가 어디에 있는지 알 수있는 유일한 방법입니다.
답변
시행 착오 후 새로 고침 파일에 대한 일부 정보. 이러한 실험은 Visual Studio 2012로 수행되었습니다. 참조는 C # asp.net 웹 프로젝트에 추가되었습니다.
설명한대로 찾아보기를 통해 어셈블리에 대한 참조를 추가하면 .refresh 파일이 추가됩니다. 그러나 추가 한 디렉터리의 명시 적으로 추가 된 DLL에 추가 종속 DLL이있는 경우 종속 항목도 암시 적으로 추가되지만 .refresh 파일은 없습니다! 예를 들어 “MyAssembly.dll”에 대한 참조를 추가하면 “MyAssembly.dll.refresh”도 표시됩니다. 그러나 “MyAssembly.dll”이 의존하는 “MyDependentAssembly.dll”어셈블리가 있으면 “MyDependentAssembly.dll.refresh”를 얻지 못합니다. 따라서 하나의 어셈블리가 새로 고쳐 지지만 종속 항목이 아닌 경우가 발생합니다! 종속성의 역순으로 DLL을 한 번에 하나씩 추가해야합니다. 그러면 더 잘 작동합니다.
주의해야 할 다른 것들. “MyAssembly.dll”을 추가하면 “MyAssembly.pdb”도 추가됩니다 (있는 경우). 또한 “MyAssembly.xml”이있는 경우 참조에 추가됩니다. “MyAssembly.dll.refresh”가 있으면이 두 파일도 새로 고쳐집니다.
그러나 Visual Studio는 언제 새로 고침 파일을 찾기로 결정합니까? 이제 웹 프로젝트에서 프로젝트 파일은 참조 된 DLL을 구체적으로 추적하지 않습니다. 프로젝트 파일에만 나열된 DLL은 프로젝트 종속성에서 찾을 수 없습니다. 그러면 언제 새로 고침이 발생합니까?
새로 고침이 발생하는시기에 대한 대답은 참조 된 어셈블리를로드해야하는 빌드 중에입니다. 즉, 미리 빌드 된 업데이트 가능한 웹 사이트를 구축하면 모든 DLL을 가져 오지 못할 수도 있습니다. 새로 고치지 않는 DLL을 계속 가지고 있었고 .ascx 파일 내에서만 사용되고 있다는 것을 깨달았습니다. MSBuild 옵션 프로젝트 페이지에서 “미리 컴파일 된 사이트를 업데이트 할 수 있도록 허용”확인란을 선택 취소하면이 문제가 해결되었습니다.
코드에서 리플렉션을 통해로드 된 참조 된 DLL을 추가하면 참조를 통해 업데이트되지 않습니다. 빌드 이벤트를 사용하여 bin 디렉토리에 복사해야합니다.