use anyhow::Context;
use duct::cmd;
use std::fs;
use std::path::{Path, PathBuf};
pub(crate) fn build_csharp(project_path: &Path, _build_debug: bool) -> anyhow::Result<PathBuf> {
let output_path = project_path.join("bin/Release/net7.0/StdbModule.wasm");
if output_path.exists() {
std::fs::remove_file(&output_path)?;
}
fs::metadata(project_path).with_context(|| {
format!(
"The provided project path '{}' does not exist.",
project_path.to_str().unwrap()
)
})?;
let result = cmd!("dotnet", "publish", "-c", "Release").dir(project_path).run();
match result {
Ok(_) => {}
Err(error) => {
if error.kind() == std::io::ErrorKind::NotFound {
anyhow::bail!("Failed to build project. dotnet not found in path. Please install the .NET Core SDK.");
} else {
anyhow::bail!("Failed to build project. {}", error);
}
}
}
if !output_path.exists() {
anyhow::bail!("Failed to build project");
}
Ok(output_path)
}