2011-03-01 35 views
10

Tôi hiện đang làm việc với dự án MVC3 bằng Razor. Tôi có nhà bếp trong việc biên soạn Chế độ xem để nhận biết lỗi chính tả, v.v. tại thời gian biên dịch.MVC3 Lỗi lạ sau khi chuyển đổi chế độ xem

Ngay sau khi tôi chuyển trên <MvcBuildViews> đúng </MvcBuildViews > trong file cấu hình dự án một nhận được lỗi sau khi biên dịch:

Lỗi 1 Đây là một lỗi sử dụng một phần đăng ký là allowDefinition = 'MachineToApplication' vượt quá mức ứng dụng. Lỗi này có thể được gây ra bởi một thư mục ảo không được cấu hình như một ứng dụng trong IIS.

Tôi đọc một số giải pháp khả thi cho vấn đề, chủ yếu liên quan đến IIS và Thư mục ảo hoặc Ứng dụng. Vấn đề là, tôi không sử dụng IIS, nhưng thay vì sử dụng Visual Studio Development Server mặc định.

Tôi có thể làm gì để giải quyết vấn đề này?

Trả lời

21

Tôi đã thử nhiều giải pháp khác nhau có sẵn trên web nhưng chúng không hoàn toàn phù hợp với vấn đề của tôi hoặc chúng không hoạt động.

Để tóm tắt lại sự cố của tôi:

Sau khi chuyển đổi Biên dịch, tôi ngay lập tức nhận được lỗi ở trên trong khi biên dịch. Tôi đang sử dụng Visual Studio Development Server mặc định của VS2010 để kiểm tra ứng dụng MVC của mình.

Hôm nay tôi mở một yêu cầu tại vùng hỗ trợ nhà phát triển của Microsoft, và - Tôi gần như xấu hổ phải thừa nhận nó - có câu trả lời của tôi khoảng 30 giây vào gọi lại từ các kỹ thuật viên:

Tất cả các ông nói là: Xin goto của bạn thư mục obj và xóa tất cả nội dung. Sau đó biên dịch lại.

Và đó thực sự là tất cả những gì bạn cần.

Vì vậy, sau nhiều lần lắc đầu về bản thân tôi, tôi muốn chia sẻ kết quả với bạn.

+0

Cảm ơn bạn đã đăng nhập tại đây. Tôi chỉ gặp phải điều tương tự và đã gãi đầu tại sao một sự thay đổi đơn giản như vậy lại có thể có hiệu ứng này. – Rudi

+0

Tôi đã nhận được lỗi giống như kết quả của cấu hình khác với mô tả ban đầu của bạn. Nhưng việc xóa thư mục obj cũng đã giải quyết được vấn đề của tôi. Cảm ơn bạn đã chia sẻ giải pháp, nó vẫn có liên quan gần một năm sau đó. –

+0

siêu giải pháp.Bạn đã lưu ngày của tôi :) –

3

Sự cố này xảy ra khi có đầu ra dự án web (tệp web.config tạm thời hoặc tệp xuất bản tạm thời) trong thư mục obj. Trình biên dịch ASP.NET được sử dụng không đủ thông minh để bỏ qua các công cụ trong thư mục obj, do đó, nó ném các lỗi thay vào đó.

Khắc phục khác là hủy kết quả xuất bản ngay trước khi gọi <AspNetCompiler>. Mở csproj bạn và thay đổi này:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 

này:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> 
    <ItemGroup> 
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" /> 
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" /> 
    </ItemGroup> 
    <Delete Files="@(ExtraWebConfigs)" /> 
    <RemoveDir Directories="@(ExtraPackageTmp)" /> 
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> 
</Target> 

Đó sẽ xóa tất cả web.configs dưới \ obj, cũng như tất cả các thư mục PackageTmp dưới \ obj.

+0

Đây là giải pháp tốt nhất theo ý kiến ​​của tôi. Không giống như những người khác, nó không yêu cầu bạn thực hiện một bước thủ công để xóa thư mục obj và cũng ngăn cản trình biên dịch biên dịch lại toàn bộ dự án. – Carsten

Các vấn đề liên quan