Sass SCSS by BundleTranslator

时间:2016-03-30 14:23:49

标签: asp.net iis asp.net-mvc-5 sass bundletransformer

我已经通过 NuGet (带有Core和LibSassHost组件的BundleTransformer.SassAndScss v1.9.96)在我的 MVC 5 项目中设置了 BundleTranslator )。接下来,我已将包引用添加到我的View.cshtml

public static Object[][] getTableAsMapObject(String xlFileName, String xlSheetName) throws Exception {
        Map<String, String> dataMap = null;
        Object[][] tabArray = null;

        String masterDataFilePath = "./data/MasterData.xlsx";
        try {
            FileInputStream ExcelFile = new FileInputStream("./data/" + xlFileName + ".xlsx");
            // Access the required test data sheet
            XSSFWorkbook excelWBook = new XSSFWorkbook(ExcelFile);
            XSSFSheet excelWSheet = excelWBook.getSheet(xlSheetName);
            row = excelWSheet.getRow(0);
            int totalCols = row.getLastCellNum();
            totalCols--;
            int startRow = 1;
            int startCol = 1;
            int ci;
            int totalRows = excelWSheet.getLastRowNum();
            int activeRows = 0;
            ci = 0;
            for (int i = startRow; i <= totalRows; i++, ci++) {
                if (getCellData(excelWSheet, i, 0).trim().toUpperCase().equals("YES")
                        || getCellData(excelWSheet, i, 0).trim().toUpperCase().equals("Y")) {
                    activeRows++;
                }
            }
            tabArray = new Object[activeRows][1]; //***<<< Changing 0 to 1 did the trick
            ci = 0;
            for (int i = startRow; i <= totalRows; i++) {
                if (getCellData(excelWSheet, i, 0).trim().toUpperCase().equals("YES")
                        || getCellData(excelWSheet, i, 0).trim().toUpperCase().equals("Y")) {
                    dataMap = new HashMap<String, String>();
                    for (int j = startCol; j <= totalCols; j++) {

                        String colName = getCellData(excelWSheet, 0, j);
                        if (colName.contains("_")) {
                            String[] bits = colName.split("_");
                            String lastOne = bits[bits.length-1];
                            if (lastOne.equalsIgnoreCase("key")) {
                                dataMap = getMasterDataSet(masterDataFilePath, bits[0], getCellData(excelWSheet, i, j), dataMap);
                            }
                        } else { dataMap.put(colName, getCellData(excelWSheet, i, j)); }
                    }
                    tabArray[ci][0] = dataMap;
                    dataMap = null;
                    ci++;
                }
            }
            excelWBook.close();
        } catch (FileNotFoundException e) {
            System.out.println("Could not read the Excel sheet");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("Could not read the Excel sheet");
            e.printStackTrace();
        }
        return (tabArray);
    }

并重新定义 BundleConfig.cs

@Styles.Render("~/Content/sass")

在构建之后,该网站有一个.scss参考:

var nullOrderer = new NullOrderer();
var commonStylesBundle = new CustomStyleBundle("~/Content/sass");
commonStylesBundle.Include("~/Content/Custom/the-style.scss");
commonStylesBundle.Orderer = nullOrderer;
bundles.Add(commonStylesBundle);

并且一切都在本地工作可能只是因为我已经使用 SassyStudio 安装了 SassAndCoffee 包。当我在外部IIS服务器上部署时出现问题。该文件存在于Content / Custom目录中,但该网站已损坏。 HTML代码也有文件引用(它链接到.scss文件,而不是编译.css),但如果我尝试导航到它,我会得到错误500.

我已将Sass文件构建操作更改为内容(来自)并将复制到输出目录 as 不要复制。我还在Web.config中添加了httpHandlers(但实际上我不知道是什么),但仍然没有任何帮助。

<link href="/Content/Custom/the-style.scss" rel="stylesheet">

我没有检查 Web.config 中的所有设置,因为NuGet安装(我看到)为BundleTransformer提供了这种数据。

如何配置 BundleTransformer 才能在 IIS 上正常使用?我是否必须将 BundleResolver 覆盖为in example code

<httpHandlers>
  <add path="*.sass" verb="GET" type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss" />
  <add path="*.scss" verb="GET" type="BundleTransformer.SassAndScss.HttpHandlers.SassAndScssAssetHandler, BundleTransformer.SassAndScss" />
</httpHandlers>

1 个答案:

答案 0 :(得分:2)

有几件事要尝试来诊断问题。首先它在本地工作! :)

<强> 1
值得测试的是您的捆绑正常运行。您可以通过临时设置以下内容来完成此操作(完成后将其取出)。

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        BundleTable.EnableOptimizations = true;

        // Bundles and stuff...
    }
}

运行该网站,然后在您的浏览器开发工具中,您应该得到以下内容:

  

/捆绑/ commonStyles?V = BzJZwKfP1XV8a6CotGRsHhbxraPDst9zDL2X4r36Y301

如果这样可行,那么我们可以很高兴捆绑将在生产中工作。

<强> 2
权限。如果您收到500内部服务器错误,请检查包含scss文件的文件夹的权限。还要检查它们是否存在:)

第3
哑剧型。 IIS需要为.scss添加mime类型的可能性很小,但我不相信它会。