2013-04-04 37 views
5

Tôi đang cố gắng để biên dịch một file dao cạo với dòng nàyRazorEngine phân tích cú pháp ném Không thể biên dịch

RazorEngine.Razor.Parse("Hello world"); 

Nhưng nó chỉ ném

base {System.Exception} = {"Unable to compile template. Source file 'C:\\Windows\\TEMP\\vlu4zahf.0.cs' could not be found\n\nOther compilation errors may have occurred. Check the Errors property for more information."} 

Và tài sản lỗi như sau:

[0] = {error CS2001: Source file 'C:\Windows\TEMP\vlu4zahf.0.cs' could not be found} 
[1] = {warning CS2008: No source files specified} 

Vì vậy, không có thông tin tốt.

Tôi đang chạy .NET 4.0 và Razor cơ 3.2.0.0

Cập nhật 1

tôi đã định vị được lỗi để dòng này trong RazorEngine

Tuple.Create(
       compileResult.CompiledAssembly.GetType("CompiledRazorTemplates.Dynamic." + context.ClassName), 
       compileResult.CompiledAssembly); 
+0

Vui lòng kiểm tra http://stackoverflow.com/questions/6444277/using-razorengine-to-parse-razor -templates-concurrently – Amit

+0

@AmitAgrawal Cảm ơn, nhưng bài viết về độ an toàn của luồng. Tôi hiện chỉ có một chuỗi hoạt động. –

Trả lời

8

Đây có lẽ là nhất vấn đề quyền cho tài khoản người dùng biên dịch tệp dao cạo. Hãy chắc chắn rằng nó có tất cả nhưng cho phép kiểm soát đầy đủ trên C: \ Windows \ Temp

Xem ở đây để biết nền: http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/85f9b330-a938-4afe-a615-db83085e52d2/

+1

Không có cách nào để đặt thư mục tạm thời mà nó sử dụng cho thư mục khác? Điều gì sẽ xảy ra nếu tôi không muốn cung cấp cho tài khoản người dùng "tất cả trừ quyền kiểm soát đầy đủ" đối với các cửa sổ tạm thời ... – crush

+0

@crush xem câu trả lời của guerillapresident bên dưới, cho thấy cách thực hiện chính xác điều đó. Đây nên là cách tiếp cận ưa thích ở đây, việc cấp "tất cả trừ sự cho phép đầy đủ" vào một thư mục âm lượng hệ thống chắc chắn * không * là phương pháp hay nhất. –

+1

@OskarAustegard Đó là giải pháp tương tự mà tôi đã đưa ra. Tôi đã quan tâm nếu có bất kỳ tác động hiệu quả nào của việc kích hoạt tải hồ sơ người dùng, nhưng dường như không có. – crush

6

câu trả lời Adrian của hướng dẫn tôi hướng tới một số nghiên cứu là tại sao c: \ windows \ temp sẽ cần thiết/sử dụng ngay từ đầu. Hóa ra việc sử dụng thư mục này liên quan trực tiếp đến nhóm ứng dụng IIS mà tôi đã tạo cho ứng dụng. Hồ bơi tôi đang sử dụng có cài đặt "Tải hồ sơ người dùng" được đặt thành Sai. Hóa ra thuộc tính này được đặt thành False theo mặc định chỉ để duy trì tính tương thích ngược cho các ứng dụng được thiết kế để chạy trên IIS 6 (trước khi tùy chọn tải hồ sơ tồn tại) - và vấn đề tương thích bị cô lập trong trường hợp các ứng dụng đó đang tận dụng% temp% danh mục. Mặc dù nó là một mặc định, thiết lập nó để False không phải là thực hành ưa thích theo Microsoft.

Ngược lại, cài đặt này phải được đặt đúng và làm như vậy sẽ cung cấp cho ứng dụng của bạn thư mục% temp% trong hồ sơ của người dùng chạy hồ bơi ứng dụng. Làm như vậy giảm thiểu sự cần thiết phải thay đổi quyền truy cập khối lượng hệ thống.

Cài đặt này có thể truy cập được trong Cài đặt nâng cao của AppPool trong Trình quản lý IIS.

này cũng có thể được thực hiện trong PowerShell (run as administrator) bằng cách chạy như sau:

Import-Module WebAdministration 
$appPoolName = "ReplaceWithYourAppPoolName" 
$appPool = Get-Item IIS:\AppPools\$appPoolName 
$appPool.processModel.loadUserProfile = $true 
$appPool | Set-Item 
Các vấn đề liên quan