如何使C#源文件由Visual Studio处理,但不在程序集中编译?
我在项目树中有许多C#脚本源文件,标记为如何使C#源文件由Visual Studio处理,但不在程序集中编译?,c#,visual-studio-2010,visual-studio,build,msbuild,C#,Visual Studio 2010,Visual Studio,Build,Msbuild,我在项目树中有许多C#脚本源文件,标记为buildaction:None 问题是:如果源文件标记为生成操作:无,则转到声明,转到实现,Visual Studio和Resharper的其他导航和重构功能不再工作 一旦应用程序运行,脚本文件最终由CSharpCodeProvider编译,其行为通常与实际代码库(原始可执行程序集)中的脚本文件完全相同 这里的区别在于源文件不是由MSBuild编译的,而是由应用程序本身编译的 我如何强制Visual Studio/build process分析文件(就好
buildaction:None
问题是:如果源文件标记为生成操作:无
,则转到声明
,转到实现
,Visual Studio和Resharper的其他导航和重构功能不再工作
一旦应用程序运行,脚本文件最终由CSharpCodeProvider
编译,其行为通常与实际代码库(原始可执行程序集)中的脚本文件完全相同
这里的区别在于源文件不是由MSBuild编译的,而是由应用程序本身编译的
我如何强制Visual Studio/build process分析文件(就好像它们将被编译一样),而不将它们包含到最终的可执行程序集中?一个可能的选择是使用不同的生成配置,对相关文件进行不同的设置 您可以有一个开发配置,其中文件设置为“编译”,以及一个部署配置,其中文件设置为“无”
这样,您在处理代码时将获得良好的智能感知,并且在构建之前切换到“部署”配置时不会发生编译。如果您编辑主项目文件(
.csproj
)并在构建后添加一个目标,您可以在构建后调用任何自定义操作。以下示例为扩展名为.proj
的项目中的所有Build Action=None
项调用compile.exe
<Target Name="AfterBuild">
<ItemGroup>
<Scripts Include="@(None)" Condition="'%(Extension)' == '.proj'" />
</ItemGroup>
<Message Text="Scripts files: @(Scripts)" Importance="high" />
<Exec Command="Compile.exe %22%(Scripts.FullPath)%22"
WorkingDirectory="$(MSBuildProjectDirectory)"
Condition="'@(Scripts)' != ''" />
</Target>
应用程序运行时,您无法更改生成配置。另外,只有当存在用于切换构建配置的热键时,这才是一个好主意。这些脚本的关键思想是快速迭代——当FileSystemWatcher触发事件时,它们会自动重建并合并到正在运行的应用程序中。所有其他活动都应该取消。您使用的是VS 2010,因此您可以创建任意数量的自己的宏和热键!:)